Изменения

Перейти к: навигация, поиск

Разрешение коллизий

10 байт убрано, 10:42, 17 января 2022
опечатки
x = h1(item.key)
y = h2(item.key)
'''for''' (i = 0..m) '''if''' table[x] == ''null'' table[x] = item
'''return'''
x = (x + y) '''mod''' m
'''if''' table[x].key == key
'''return''' table[x]
'''else''' '''return''' ''null'' x = (x + y) '''mod''' m
'''return''' ''null''
'''else'''
'''return'''
x = (x + y) '''mod''' m
==Альтернативная реализация метода цепочек==
В Java 8 для разрешения коллизий используется модифицированный метод цепочек. Суть его заключается в том, что когда количество элементов в корзине превышает определенное значение, данная корзина переходит от использования связного списка к использованию [[АВЛ-дерево|сбалансированного дерева]]. Но данный метод имеет смысл лишь тогда, когда на элементах хеш-таблицы задан [[Отношение порядка|линейный порядок]]. То есть при использовании данный данныx типа <tex>\mathbf{int}</tex> или <tex>\mathbf{double}</tex> имеет смысл переходить к дереву поиска, а при использовании каких-нибудь ссылок на объекты не имеет, так как они не реализуют нужный интерфейс. Такой подход позволяет улучшить производительность с <tex>O(n)</tex> до <tex>O(\log(n))</tex>. Данный способ используется в таких коллекциях как HashMap, LinkedHashMap и ConcurrentHashMap.
[[Файл:Hashing_in_Java8.png|500px|Хеширование в Java 8.]]
Анонимный участник

Навигация