Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > HashMap


Автор: Slanix 24.11.2004, 13:18
Хочу уточнить. Если я делаю так:
Код

public class User{
...
private final HashMap hm

...

public void fillHM() {
 hm = new HashMap();
 hm.put("Device",11111111L);
 hm.put("Requests",11011001L)
}

public void setRights(String entity, long right)  { // Здесь если entity="Device", то старое
                                                    // значение в hm заместиться новым?
 hm.put(entity,right);
}
}

Автор: AntonSaburov 24.11.2004, 14:10
Ключи в HashMap различаются по хэш-коду. У строк и чисел он у одинаковых значений совпадает. Так что в твоем случаепо идее будет замещать.

Автор: LSD 24.11.2004, 20:28
Цитата(Slanix @ 24.11.2004, 13:18)
Код
hm.put(entity,right);

Во первых такой код, работать не будет. Во вторых равенство элементов определяется по equals().

Автор: Domestic Cat 25.11.2004, 04:27
Цитата(LSD @ 24.11.2004, 11:28)
Во первых такой код, работать не будет.

.... потому что long - не объект. Следует обернуть его враппером (класс Long).
Цитата(LSD @ 24.11.2004, 11:28)
Во вторых равенство элементов определяется по equals().


Когда че-нибудь ложится в хешмап, сначала находится хеш код ключа, затем ищутся значения с таким ключом, и если они есть, они сравниваются, причем не через equals а через метод eq() с дефаулт видимостью.

Автор: AntonSaburov 25.11.2004, 13:47
Цитата(Domestic @ 25.11.2004, 05:27)
.... потому что long - не объект. Следует обернуть его враппером (класс Long).

Для JAVA 1.5 это уже будет делаться автоматически. Но в остальных случаях обернуть конечно надо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)