Читаю про HashCode, HashTable и HashMap. Скажите
От: Аноним  
Дата: 16.06.07 11:53
Оценка:
популярно что это такое, начиная с первого . Зачем оно нужно?
Re: Читаю про HashCode, HashTable и HashMap. Скажите
От: aefimov Россия
Дата: 16.06.07 19:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>популярно что это такое, начиная с первого . Зачем оно нужно?


Почитайте про хеширование.
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. Скажите
От: Анатолий Широков СССР  
Дата: 16.06.07 20:50
Оценка:
Здравствуйте, Аноним, Вы писали:

A>>HashMap -- это таблица с соответствиями ключ->значение. Причем устроена эта таблица на основе хешкодов объектов-ключей. Хешкод ключа определяет индекс в массиве массивов. Поиск ключа в таком массиве выполняется с константной сложностью. Сначала по хешкоду ищется массив по индексу, дальше в этом массиве ищет нужный ключ уже по совпадению в equals.


А>Странно. Я всегда думал, что постоянное время поиска только у TreeSet и TreeMap а, у HashMap, HashTable элементы вроде не отсортированы по ключу. Или под постоянной сложностью поиска понимается N/2 ?


TreeSet и TreeMap дают логарифмическое время (это сложность бинарный поиска), а если хеш фукнция подобрана очень хорошо (то есть отображение множества объектов на множество индексов будет взаимооднозначным), то поиск в хеш таблице будет выполняться за константное время hash(объект) -> индекс в массиве -> взятие значения из массива по полученному индексу.
Re: Читаю про HashCode, HashTable и HashMap. Скажите
От: kejroot  
Дата: 17.06.07 09:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>популярно что это такое, начиная с первого . Зачем оно нужно?


Если в целом, структуры данных, наряду с алгоритмами, это основа программы. Это важно
Вот так, если коротко ;)
Re[2]: Читаю про HashCode, HashTable и HashMap. Скажите
От: yanys  
Дата: 17.06.07 12:59
Оценка: +1
A>Hashtable -- это просто синхронизированный HashMap.
Ага, и еще в случае Hashtable недопустим null как в качестве ключа, так и в качестве значения, а в HashMap null допустим и там и там.
Re[3]: Читаю про HashCode, HashTable и HashMap. Скажите
От: aefimov Россия
Дата: 17.06.07 20:11
Оценка:
Здравствуйте, yanys, Вы писали:

Y>Ага, и еще в случае Hashtable недопустим null как в качестве ключа, так и в качестве значения, а в HashMap null допустим и там и там.


И он там, в HashMap, очень зря допустим. Всю строгость работы хеширования ломает.
Какой hashCode у null, например? Вобщем, на мой взгляд — сомнительное допущение. Хотя, вероятно, позволяет избежать кучи NPE...
Re[4]: Читаю про HashCode, HashTable и HashMap. Скажите
От: Cyberax Марс  
Дата: 17.06.07 21:36
Оценка: +1
Здравствуйте, aefimov, Вы писали:

A>И он там, в HashMap, очень зря допустим. Всю строгость работы хеширования ломает.

A>Какой hashCode у null, например? Вобщем, на мой взгляд — сомнительное допущение. Хотя, вероятно, позволяет избежать кучи NPE...
Можно положить hashCode(null) равным нулю. От этого ничего не пострадает — максимум будет чуть больше коллизий hash-кодов.

А вот возможность класть нулевые значения — очень удобна.
Sapienti sat!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.