Здравствуйте, Аноним, Вы писали:
А>популярно что это такое, начиная с первого . Зачем оно нужно?
Почитайте про хеширование.
hashCode -- некий индекс для быстро поиска нужного объекта. Как правило функция hashCode должна возвращать некое уникальное значение.
HashMap -- это таблица с соответствиями ключ->значение. Причем устроена эта таблица на основе хешкодов объектов-ключей. Хешкод ключа определяет индекс в массиве массивов. Поиск ключа в таком массиве выполняется с константной сложностью. Сначала по хешкоду ищется массив по индексу, дальше в этом массиве ищет нужный ключ уже по совпадению в equals.
Hashtable -- это просто синхронизированный HashMap.
Re[2]: Читаю про HashCode, HashTable и HashMap. Скажите
От:
Аноним
Дата:
16.06.07 20:13
Оценка:
A>HashMap -- это таблица с соответствиями ключ->значение. Причем устроена эта таблица на основе хешкодов объектов-ключей. Хешкод ключа определяет индекс в массиве массивов. Поиск ключа в таком массиве выполняется с константной сложностью. Сначала по хешкоду ищется массив по индексу, дальше в этом массиве ищет нужный ключ уже по совпадению в equals.
Странно. Я всегда думал, что постоянное время поиска только у TreeSet и TreeMap а, у HashMap, HashTable элементы вроде не отсортированы по ключу. Или под постоянной сложностью поиска понимается N/2 ?
Re[3]: Читаю про HashCode, HashTable и HashMap. Скажите
Здравствуйте, Аноним, Вы писали:
A>>HashMap -- это таблица с соответствиями ключ->значение. Причем устроена эта таблица на основе хешкодов объектов-ключей. Хешкод ключа определяет индекс в массиве массивов. Поиск ключа в таком массиве выполняется с константной сложностью. Сначала по хешкоду ищется массив по индексу, дальше в этом массиве ищет нужный ключ уже по совпадению в equals.
А>Странно. Я всегда думал, что постоянное время поиска только у TreeSet и TreeMap а, у HashMap, HashTable элементы вроде не отсортированы по ключу. Или под постоянной сложностью поиска понимается N/2 ?
TreeSet и TreeMap дают логарифмическое время (это сложность бинарный поиска), а если хеш фукнция подобрана очень хорошо (то есть отображение множества объектов на множество индексов будет взаимооднозначным), то поиск в хеш таблице будет выполняться за константное время hash(объект) -> индекс в массиве -> взятие значения из массива по полученному индексу.
Re: Читаю про HashCode, HashTable и HashMap. Скажите
A>Hashtable -- это просто синхронизированный HashMap.
Ага, и еще в случае Hashtable недопустим null как в качестве ключа, так и в качестве значения, а в HashMap null допустим и там и там.
Re[3]: Читаю про HashCode, HashTable и HashMap. Скажите
Здравствуйте, yanys, Вы писали:
Y>Ага, и еще в случае Hashtable недопустим null как в качестве ключа, так и в качестве значения, а в HashMap null допустим и там и там.
И он там, в HashMap, очень зря допустим. Всю строгость работы хеширования ломает.
Какой hashCode у null, например? Вобщем, на мой взгляд — сомнительное допущение. Хотя, вероятно, позволяет избежать кучи NPE...
Re[4]: Читаю про HashCode, HashTable и HashMap. Скажите
Здравствуйте, aefimov, Вы писали:
A>И он там, в HashMap, очень зря допустим. Всю строгость работы хеширования ломает. A>Какой hashCode у null, например? Вобщем, на мой взгляд — сомнительное допущение. Хотя, вероятно, позволяет избежать кучи NPE...
Можно положить hashCode(null) равным нулю. От этого ничего не пострадает — максимум будет чуть больше коллизий hash-кодов.
А вот возможность класть нулевые значения — очень удобна.