Как по hashCode определяется позиция
Вероятно, все слышали, что есть структуры данных, в которых позиция, на которой будет храниться элемент, определяется его hashCode
Но hashCode — это Integer, значит, в таких структурах как HashMap, должен лежать массив длиной 2^32 ?
Нет, делается немного хитрее (на примере HashMap):
1. создается массив определенного размера например, arr.length = 16
2. когда наступает момент добавить новый элемент, вычисляется его хэш (хэш ключа). например, hashCode = 200
3. вычисляется позиция, на которую нужно положить элемент = hashCode % arr.length = 200 % 16 = 8
4. на позиции 8 создается массив. в него добавляется наш элемент
5. когда следующий элемент попадает на позицию 8, наш первый элемент сохраняет на него ссылку
да, мы получили массив связанных списков
да, нам теперь плевать на коллизии
дальше можно подумать, как эту систему балансировать, изменяя размер arr.length
....
есть ли другие подходы к сохранению данных, с вычислением позиции через hashCode элемента?
Post #47
1.67K