android.util.Pair作为HashMap的关键

时间:2013-12-13 14:38:26

标签: java android

http://developer.android.com/reference/android/util/Pair.html用于HashMap中的键是否可以? 从那以后,这个类为equals()和hashCode()提供了有效的实现。我是对的吗?

2 个答案:

答案 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应该没问题。