|
|
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
Может немного тупой вопрос. Есть уже заполненная Hashtable. Необходимо пройтись последовательно по всем ключам и у каждого ключа-объекта изменить/установить некое поле. Можно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 14:09 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
ничего не выйдет, т.к. при добавлении нвой записи в таблицу из ключа вычисляется hashcode который является индексом в массиве... если даже и попытаться изменить все ключи, необходимо будет тогда и повторно вычислить значения hashcode, что в худшем случае вызовет просто нарушение целостности таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 14:19 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
тоесть хотел сказать в лучшем случае :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 14:24 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
А так вроде работает. Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 14:40 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
а если в качестве ключа использовать тип String? и во-вторых, вы ведь переопределили метод hashCode. и он возвращает в обоих случаях одинаковое значение, собственно говоря Вам только показалось что вы поменяли ключ - на самом деле он остался тем же.. попробуйте менять у класса поле id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 14:52 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
потому что, как мне кажется, хеш-таблице все равно какой объект и какие поля у ключа - главное - что возвращает hashCode ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 14:53 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
Понятно, что не стоит менять поля ключа, которые изменят hashCode. Просто у меня сначала была сложность вообще поменять поле ключа, любое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 14:58 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
И даже при измении id в примере выше похоже никаких коллизий не происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 15:02 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
ЯИ даже при измении id в примере выше похоже никаких коллизий не происходит. а вы уверены что после изменения ключей по ним извлекаются их же значения? в вашем коде вы не увидете изменений потому что в таблицу ложите ключ и пустую строку... а вы попробуйте ложить не пустую строку а конкретное значение... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 15:31 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
у класса Hashtable есть метод rehash() ктоорый производит увеличение таблицы в 2 раза и перевычисление индексов... но этот метод protected и вы не сможете им воспользоваться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 15:33 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
кроме того в вашем примере вы работаете только с ключами - извлекая их из таблицы. но ведь таблица - это пара КЛЮЧ - ЗНАЧЕНИЕ.. уверен что у вас после изменения ключей эта связь будет некорректной ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 15:35 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
unicornmirageкроме того в вашем примере вы работаете только с ключами - извлекая их из таблицы. но ведь таблица - это пара КЛЮЧ - ЗНАЧЕНИЕ.. уверен что у вас после изменения ключей эта связь будет некорректной Да, похоже, что при изменении ключа т. о. что меняется хэш код, в качестве значений возвращаются нулевые ссылки (ну не факт что всегда null будет). Но если хэш код не меняется, то все в порядке. Что в принципе мне и было нужно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 15:51 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
Я unicornmirageкроме того в вашем примере вы работаете только с ключами - извлекая их из таблицы. но ведь таблица - это пара КЛЮЧ - ЗНАЧЕНИЕ.. уверен что у вас после изменения ключей эта связь будет некорректной Да, похоже, что при изменении ключа т. о. что меняется хэш код, в качестве значений возвращаются нулевые ссылки (ну не факт что всегда null будет). Но если хэш код не меняется, то все в порядке. Что в принципе мне и было нужно :) да, такой подход будет верным - использовать в качестве ключа объект с полями которые можно редактировать (назовем их информацией о ключе) и полями, определяющими сам ключ (вычисляемый в hashCode) - эту информацию менять нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 16:04 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
вот есть одна из очень хороших статей по этой проблеме: Сравнение объектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 16:11 |
|
||
|
Hashtable. Изменение полей ключа
|
|||
|---|---|---|---|
|
#18+
кстати неполенился заглянуть в исходники Hashtable.java вот что происходит при добавлении новой записи в таблицу: Код: 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. 30. 31. 32. как видно из фрагмента - внутри класса Hashtable есть переменная tab которая является обыкновенным массивом, хранящим значения, помещаемые в таблицу.. индексы этого массива вычисляются на основании хеш-кода объекта, который выступает в качестве ключа... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2006, 16:27 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33819392&tid=2148854]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
154ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 466ms |

| 0 / 0 |
