Size: a a a

2020 October 19

SB

S B in ТП
А дальше линкед лист можно улучшать и тюнить под конкретный кейс.
источник

SB

S B in ТП
Илья Билаш
Да, коллизия идёт по бакету, который вычисляется на основании hashcode, этот момент я тут упростил. Но суть остаётся - даже в случае одинаковых hashcode ничего страшного не произойдет - они определятся в один бакет и там уже разруливаем на основании equals.
И по бакету идёт не только коллизий, не путай сам себя.
источник

SB

S B in ТП
В одном бакете будут и объекты с разными ехешами.
источник

ИБ

Илья Билаш in ТП
S B
Вот теперь верно. А то что ты про генерацию нового айди написал — чтобы ты там не имел в виду — это нонсенс.
Под внутренним id я имел в виду индекс бакета, но не стал его сюда вводить чтобы не запутывать
источник

SB

S B in ТП
Поэтому я и сказал: в общем случае ты не знаешь, вследствие коллизии ли объекты в одним бакете ли нет.
источник

SB

S B in ТП
Илья Билаш
Под внутренним id я имел в виду индекс бакета, но не стал его сюда вводить чтобы не запутывать
Создание нового бакете влечёт неизбежную необходимости перераспределить все, что уже есть в хешмапе, мало того, что это очень дорого, так ещё как правило и очень бессмысленно.
источник

ИБ

Илья Билаш in ТП
S B
Поэтому я и сказал: в общем случае ты не знаешь, вследствие коллизии ли объекты в одним бакете ли нет.
Вопрос был изначально про коллизию хешкода, поэтому я про эту ситуацию и писал.
источник

ИБ

Илья Билаш in ТП
S B
Создание нового бакете влечёт неизбежную необходимости перераспределить все, что уже есть в хешмапе, мало того, что это очень дорого, так ещё как правило и очень бессмысленно.
Поэтому собственно дерево и добавили. Необходимость создавать новые бакеты все равно ж никуда не делась.
источник

SB

S B in ТП
Илья Билаш
Поэтому собственно дерево и добавили. Необходимость создавать новые бакеты все равно ж никуда не делась.
А как дерево помогает? Дерево чего?
источник

ИБ

Илья Билаш in ТП
S B
А как дерево помогает? Дерево чего?
Вот че нагуглил

Как мы уже знаем в случае возникновения коллизий объект node сохраняется в структуре данных "связанный список" и метод equals() используется для сравнения ключей. Это сравнения для поиска верного ключа в связанном списке -линейная операция и в худшем случае сложность равнa O(n).


Для исправления этой проблемы в Java 8 после достижения определенного порога вместо связанных списков используются сбалансированные деревья. Это означает, что HashMap в начале сохраняет объекты в связанном списке, но после того, как колличество элементов в хэше достигает определенного порога происходит переход к сбалансированным деревьям. Что улучшает производительность в худшем случае с O(n) до O(log n).

Я в эти дебри уже не вникал
источник

SB

S B in ТП
Илья Билаш
Вот че нагуглил

Как мы уже знаем в случае возникновения коллизий объект node сохраняется в структуре данных "связанный список" и метод equals() используется для сравнения ключей. Это сравнения для поиска верного ключа в связанном списке -линейная операция и в худшем случае сложность равнa O(n).


Для исправления этой проблемы в Java 8 после достижения определенного порога вместо связанных списков используются сбалансированные деревья. Это означает, что HashMap в начале сохраняет объекты в связанном списке, но после того, как колличество элементов в хэше достигает определенного порога происходит переход к сбалансированным деревьям. Что улучшает производительность в худшем случае с O(n) до O(log n).

Я в эти дебри уже не вникал
Это к бакетам вообще никак.
источник

SB

S B in ТП
Это про то, что вместо цикла фон, будет условный бинарный поиск.
источник

SB

S B in ТП
Работу с бакетами как таковыми и боль перераспределения — это вообще никак не умаляет.
источник

ИБ

Илья Билаш in ТП
Помню, что переход на 8 Яву дал нам неплохой буст к производительности, и я тогда нашел это изменение в ченджлогах
источник

SB

S B in ТП
Илья Билаш
Помню, что переход на 8 Яву дал нам неплохой буст к производительности, и я тогда нашел это изменение в ченджлогах
А это как раз к тому, что @ogurchinskiy хештаблица из коробки работает далеко неидеально и заточена под среднее на рынке.
источник

ИБ

Илья Билаш in ТП
S B
Работу с бакетами как таковыми и боль перераспределения — это вообще никак не умаляет.
Но внутри бакета уже становится пошустрее работа
источник

SB

S B in ТП
Илья Билаш
Но внутри бакета уже становится пошустрее работа
Угу, но тут масштаб пользы совсем другой.
источник

SB

S B in ТП
Другой порядок цифр.
источник

ИБ

Илья Билаш in ТП
Вот не готов сейчас даже сказать в какую сторону
источник

SB

S B in ТП
Илья Билаш
Вот не готов сейчас даже сказать в какую сторону
В бакете у тебя будет 1/N объектов от общего их количества, где N это количество бакетов при условии, что хеширование прям идеально равномерное.
источник