Можно ли использовать http://developer.android.com/reference/android/util/Pair.html это для ключей в HashMap? Это потому, что для меня этот класс обеспечивает допустимую реализацию для equals() и hashCode(). Я прав?android.util.Pair как ключ в HashMap
ответ
Поскольку Pair поддерживает равные и hashcode, вы можете безопасно использовать его в качестве ключа.
Я собрал очень простой тест JUnit, чтобы убедиться, что это правда & он прошел.
public final void testPairAsHashMapKey() {
HashMap<Pair<Integer, Integer>, String> map = new HashMap<Pair<Integer, Integer>, String>();
Pair<Integer, Integer> p1 = new Pair<Integer, Integer>(0, 0);
Pair<Integer, Integer> p2 = new Pair<Integer, Integer>(0, 0);
Pair<Integer, Integer> p3 = new Pair<Integer, Integer>(5, 3);
Pair<Integer, Integer> p4 = new Pair<Integer, Integer>(3, 5);
map.put(p1, "foo");
assertEquals(1, map.size());
assertEquals("foo", map.get(p1));
map.put(p2, "new_foo");
// p2.equals(p1) so map will not grow but value will update
assertEquals(1, map.size());
assertEquals("new_foo", map.get(p2));
map.put(p3, "bar");
assertEquals(2, map.size());
assertEquals("bar", map.get(p3));
map.put(p4, "test");
assertEquals(3, map.size());
assertEquals("test", map.get(p4));
}
Метод равенства проверяет два объекта на равенство, делегируя их соответствующим методам equals.
Если вы переопределяете метод equals ваших объектов в соответствии с вашей целью, все будет в порядке. Это же касается hashCode, но не меняет его. По умолчанию hashCode должен быть в порядке.
Вы должны ВСЕГДА переопределять хэш-код, когда вы переопределяете равные, и наоборот. _ «По определению, если два объекта равны, их хэш-код также должен быть равен. Если вы переопределите метод equals(), вы измените способ приравнивания двух объектов и реализацию объекта hashCode() уже недействительным, если вы переопределите метод equals(), вы также должны переопределить метод hashCode(). »_ –
да, это совершенно правильно, но если ваш код не использует hashCode, это не имеет значения. Например, этот код работает отлично, даже если я не переопределяю функцию hashCode. класс Тест { \t частный int i; \t \t общественный тест (int i) { \t \t this.i = i; \t} \t \t @Override \t общественные булевы равно (Объект O) \t { \t \t возвращение this.I == ((тест) о) .i; \t}} общественного класса Основное { \t \t государственной статической силы основных (String []) {арг \t \t \t \t Тест t1 = новый тест (1); \t \t Испытание t2 = новое испытание (2); \t \t Испытание t22 = новое испытание (2); \t \t \t \t System.out.println (t1.equals (t2)); \t \t System.out.println (t2.equals (t22)); \t \t \t \t }} –
Вы ошибаетесь, потому что если вы переопределить равных, вы должны соблюдать договор 'x1.equals (x2) => (x1.hashCode() == x2.hashCode())'. –
- 1. android.util.Pair пример
- 2. Как изменить ключ в hashmap?
- 3. Строка как ключ в hashmap
- 4. Строки как ключ в Hashmap
- 5. Как создать массив объектов android.util.Pair?
- 6. HashMap с двойным, как ключ
- 7. HashMap, имеющий нуль как ключ
- 8. Строковый массив как ключ HashMap
- 9. HashMap для перечисления как ключ
- 10. Как найти ключ от HashMap
- 11. android.support.v4.util.Pair vs android.util.Pair
- 12. Извлечь ключ из HashMap
- 13. Содержит операции в HashMap ключ
- 14. Hashmap содержит ключ
- 15. Установите Ключ HashMap в сеттер
- 16. Пользовательский ключ для HashMap
- 17. Ключ подтверждения в hashmap JUnit
- 18. Первый ключ HashMap: null
- 19. HashMap Object ключ
- 20. Показать hashmap ключ в jstl
- 21. Как получить ключ JButton в HashMap
- 22. Сортировка HashMap объекта (не ключ)
- 23. HashMap - получение Первый ключ значение
- 24. Удалить HashMap ключ из строки
- 25. JSTL Hashmap и динамический ключ
- 26. Ключ Java HashMap к jQuery
- 27. как сравнить ключ и значение hashmap
- 28. HashMap с значением объекта как ключ
- 29. HashMap с ключом int как ключ
- 30. Freemarker и hashmap. Как получить ключ-значение
Я бы сказал, да, и я бы сказал, что вы можете точно знать, тестируя его. – njzk2