|
|
|
Поиск по собственному ключу(key) в HashMap. (equals?)
|
|||
|---|---|---|---|
|
#18+
Код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. В консоли: Код: plaintext 1. В чём я ошибаюсь? Вроде в доках по интерфейсу Map написано что ключь сравнивается по методу equals, но в HashMap нечего такого ненашол. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2006, 01:31 |
|
||
|
Поиск по собственному ключу(key) в HashMap. (equals?)
|
|||
|---|---|---|---|
|
#18+
Правильно, по методу equals (кроме карты IdentityHashMap). Но вот так: Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2006, 08:19 |
|
||
|
Поиск по собственному ключу(key) в HashMap. (equals?)
|
|||
|---|---|---|---|
|
#18+
Нужно переопределить метод hashCode. Стандартная реализация возвращает разные значения. В итоге получается несуразная ситуация, когда два экземпляра равны по equals, но имеют разные hashCode. Поэтому одновременно с реализацией equals всегда нужно реализовать и hashCode. Это имеет прямое отношение к HashMap. Он сначала ищет по хеш-значению (которое формируется на основе hashCode), а потом уже из отобранных объектов - по equals. В итоге, без правильной реализации hashCode более вероятно, что он просто ничего не найдет ( но может и найти, это уже как повезет с хеш-значением ). Простейшая (но и самая не эффективная) реализация: Код: plaintext 1. 2. 3. Реализация equals у вас тоже неправильная. Вот как надо: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Почитайте любую книжку по основам Java - там это все расписано. Сравнение объектов: теория ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2006, 09:50 |
|
||
|
Поиск по собственному ключу(key) в HashMap. (equals?)
|
|||
|---|---|---|---|
|
#18+
to ponomarevvb: Да мне стыдно :) за такую глупую оплошность(return s==((TT)obj).s;). Но при реализации s.equals(((TT)obj).s); всеравно неработает. to Ненавижу регистрацию: Спасибо. Действительно перегрузил hashCode и заработало!. Получается что если не перегрузить , то работает hashCode от адреса объекта(Object). Код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. На консоли: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2006, 11:03 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33640137&tid=2149716]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 465ms |

| 0 / 0 |
