将http://developer.android.com/reference/android/util/Pair.html用于HashMap中的键是否可以? 从那以后,这个类为equals()和hashCode()提供了有效的实现。我是对的吗?
答案 0 :(得分:4)
由于Pair支持equals和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));
}
答案 1 :(得分:0)
equal方法通过委托各自的equals方法来检查两个对象是否相等。
如果根据目的覆盖对象的equals方法,一切都会好的。 它与hashCode相同,但不要改变它。默认的hashCode应该没问题。