![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| DissDoc |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 463 Регистрация: 13.7.2006 Репутация: нет Всего: нет |
Всем привет!
Появилась проблема (решения не требую, прошу указать ЧТО искать и как искать), не могу найти решения в нете. Видно плохо ищу Собственно, есть класс свой (который работает как ключ)
Собственно заполняем значениями HashMap.
Так вот вопрос. можно ли как-то заставить HashMap отдавать по ключу hm.get(new MyClass(1, -1)) значения test1 и test2? |
||||
|
|||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Я правильно понял, вы хотите получить результат только по первому полю, без второго? Вообще тогда лучше создать свой контейнер. Использовать HashMap в таком случае - плохая идея.
Так же можно сделать ассоциативный контейнер, который по первому полю возвращает другой ассоциативный контейнер, в котором уже первое поле равно заданному во всех объектах. Если нужно будет вернуть объект MyClass(1, 1), то будет что-то типа map.get(1).get(2) Но с другой стороны, вам же иногда захочется, например, взять объекты только по второму полю? Храните лучше данные в базе и с помощью sql делайте что душе угодно. З.Ы. в прологе хорошо было бы - что-нибудь типа get(1, _) и все Это сообщение отредактировал(а) Stolzen - 23.6.2011, 10:27 |
|||
|
||||
| DissDoc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 463 Регистрация: 13.7.2006 Репутация: нет Всего: нет |
ммм... В базе в данном случае плохо
Я вначале собираю все данные о 3д модели. А потом их каким-то образом формирую в виде дерева. И вот собственно и хотел через hashMap Но вы подали интересную идею Буду пробовать Тем не менее жду еще советов) |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Можно использовать что-нибудь типа SQLite которая будет хранится в памяти, а не на жестком - работа с ней будет очень быстрая. |
|||
|
||||
| DissDoc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 463 Регистрация: 13.7.2006 Репутация: нет Всего: нет |
А вот это уже интересно.
Я же тоже фактически в памяти храню значения. |
|||
|
||||
| Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 6 Всего: 16 |
А можно посмотреть на реализацию equals и hashCode у MyClass?
|
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Skipy, +100500
Реализуйте equals и hashCode и все должно заработать. |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Ну не совсем "все". После правильной реализации equals и hashCode у HashMap не появится несвойтсвенных ему возможностей. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А какие критерии "правильности"? По сабжу можно использовать TreeMap и свой компаратор. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Например: - Соблюденный контракт - Равномерное распределение результатов хеш-функции - Маленькое число коллизий Ну а вообще - Effective Java second edition, items 8-9 |
|||
|
||||
| Skipy |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 6 Всего: 16 |
http://download.oracle.com/javase/6/docs/a...va.lang.Object) http://download.oracle.com/javase/6/docs/a...html#hashCode()
Нельзя. Суть в том, что чем бы ни руководствовалась коллекция при проверке эквивалентности ключа, эта проверка всегда одинакова. А автор хочет, чтобы при помещении в коллекцию учитывались оба значения, а при извлечении - одно в некоторых случаях не учитывалось бы. Так не бывает. Про equals/hashcode я на самом деле так спросил, для проформы. Чтобы не расслаблялись. А исходное требование так просто не реализуемо, надо писать собственную коллекцию, которая это умеет. |
||||
|
|||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Спасибо копетаны ... так чтобы они реализовали сравнение только по первому полю. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Ну да, но это же не значит, что HashMap или TreeMap сможет после этого сразу несколько значений возвращать. Да и это нерправильно - объекты-то получаются разными, поэтому второе поле нужно учитывать, реализуя equals Следовательно, по контракту его нужно и в hashCode использовать. Это сообщение отредактировал(а) Stolzen - 24.6.2011, 12:12 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
TreeMap+Comparator+subMap() А откуда известна логика, какие объекты считать разными, а какие одинаковыми? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Я осмелился предположить Ну а вообще иногда же все-таки такой контейнер предполагается использовать по назначению. Как тогда вытащить MyClass(1,1), если для MyClass(1,2) и MyClass(1,3) и equals, и hashCode одно и то же возвращают? А, ну да, реализовать компаратор... Все равно это танцы с бубном |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |