Как Get метод HashMap'а или Hashtable'а работает внутри Java.
В этой статье пересмотрим пару интересных вопросов связанных с внутренней работой HashMap в Java, наболее часто спрашиваемых у senior Java разработчиков, с опытом от 4 до 6 и свыше 8 лет работы. Я сделал обзор многих этих вопросов про HashMap, начиная от безопасности потоков в условиях гонки, в моем посте об internal working of Java HashMap, но я думал об пересмотре двух таких вопросах, Как get метод HashMap или Hashtable работает внутри Java и Что случается если два различных ключа возратят тотже hashCode, как делаете вы возврат значения из HashMap в этом случае. Эти вопросы очень популярны в инвест банкинг домене, и предпочтительный выбор интервьювера, интервьювер опытный Java профессионал.
Если эти вопросы до сих пор спрашивают, это означает что не многие на них отвечают уверено и ясно, как хотелось бы спрашивающему. Это мотивирует меня пересмотреть этот вопрос снова. Чтобы лутше понимать эти вопросы, вы должны хорошо знать equals and hashcode method.
Покрайне мере вы должны знать что:
1) Два неуникальных объекта могут возращать тот же самый hashCode.
2) Когда два объекта равны по equals(), они должны иметь тотже самый hashcode.
Источник
Если эти вопросы до сих пор спрашивают, это означает что не многие на них отвечают уверено и ясно, как хотелось бы спрашивающему. Это мотивирует меня пересмотреть этот вопрос снова. Чтобы лутше понимать эти вопросы, вы должны хорошо знать equals and hashcode method.
Покрайне мере вы должны знать что:
1) Два неуникальных объекта могут возращать тот же самый hashCode.
2) Когда два объекта равны по equals(), они должны иметь тотже самый hashcode.
Как get метод Hashtable работает в Java.
Я так же предлагаю читать equals and hashcode главу из книги Эффективная Java для заполнения своих пробелов. К стати по этой причине, требования для ключевого объекта в HashMap реализации обоих equals() и hashCode(), и правда что этот вопрос является одним из самых популярных среди опытных Java-программистов, спрашивающих какие требования для объектов используемых в качестве ключа в hash коллекциях таких как HashMap, Hashtable, и ConcurrentHashMap.
Другим не обязательным, но стоит отметить требованием для ключей в основанной на hash'ах коллекциях есть Immutable object (неизменяемый объект как String). Помня эти знания наряду с основными знаниями о hash алгоритме, которые вращаются вокруг hash функции.
Вам нужно прочитать правильную книгу о структурах данных и алгоритмах изучить больше об как хеш функция работает и различные стратегии обработки коллизий в Java. Одной из таких книг является Introduction to Algorithms by Thomas Cormen идеально подходит для программистов которые интересуются более глубоким знаниями про алгоритмы и структуры данных.
а) Key.hashCode() метод используется для нахождения бакет локации в бакет массиве. (Помните HashMap есть массив бакетов в Java) хотя hashcode () не используется непосредственно, но они передаются внутренней hash() функции.
б) В бакет массиве или лучше известной как бакет, ключ и значение хранятся в форме вложенного класса называемого Entry.
Другим не обязательным, но стоит отметить требованием для ключей в основанной на hash'ах коллекциях есть Immutable object (неизменяемый объект как String). Помня эти знания наряду с основными знаниями о hash алгоритме, которые вращаются вокруг hash функции.
Вам нужно прочитать правильную книгу о структурах данных и алгоритмах изучить больше об как хеш функция работает и различные стратегии обработки коллизий в Java. Одной из таких книг является Introduction to Algorithms by Thomas Cormen идеально подходит для программистов которые интересуются более глубоким знаниями про алгоритмы и структуры данных.
Во всяком случае давайте эти вопросы посмотрим снова:
1) Как get(Key key) метод работает внутри HashMap, и Hashtable в Java?
Шаги которые происходят когда вы вызываете get() метод с объектом ключом получить соответствующее значение из hash коллекции.
б) В бакет массиве или лучше известной как бакет, ключ и значение хранятся в форме вложенного класса называемого Entry.

Комментариев нет:
Отправить комментарий