Показаны сообщения с ярлыком Collection framework. Показать все сообщения
Показаны сообщения с ярлыком Collection framework. Показать все сообщения

вторник, 6 ноября 2012 г.

hashCode

В прошлой заметке мы говорили о HashMap, hashcode() и немного equals().

Краткое содержание: записывая пару ключ-значение (запись)  в HashMap, мы помещаем ее в одну из ячеек (бакет) массива. То, в какую именно ячейку будет помещена запись (индекс ячейки в массиве) определяется по значению hashcode() ключа. Поскольку в один бакет может быть помещено несколько записей, то в бакет записываются не сами записи, а содержащие их связные списки.

В HashMap могут быть помещены записи только с уникальными ключами. Уникальность определяется методом equals(). То есть если

new Integer(1).equals(new Integer(1)); - вернул true - объекты равны.

Чтобы вся эта система корректно работала, необходимо соблюдать 2 правила (и пожалуйста, дальше - читать обязательно, потому что именно этот вопрос любят задавать на собеседованиях):

1. равные объекты должны иметь один и тот же hashcode
 то есть, если equals - true, hashcode() возвращает одинаковое число
2. объекты, имеющие разный hashcode - неравны
то есть если hashcode() возвращает разные числа, equals обязано вернуть false

Почему соблюдать эти правила необходимо?

среда, 31 октября 2012 г.

HashSet и HashMap

Самые распространенные вопросы для собеседований можно собрать в группы. И одной из самых частых групп являются вопросы о Collection framework. Об одном из аспектов этого фреймворка мы сегодня и поговорим.

Говорить о классах Collections framework, как и о сортировке и поиске данных можно много, поэтому давайте организуем пост в виде вопросов и ответов. А вопросы постараемся задать такие же, как это делают интервьюеры.