對於HashMap中的鍵使用http://developer.android.com/reference/android/util/Pair.html這可以嗎? 對我來說,這個類爲equals()和hashCode()提供了有效的實現。我對嗎?android.util.Pair作爲HashMap中的鍵
回答
由於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));
}
equal方法通過委託給它們各自的equals方法來檢查兩個對象是否相等。
如果你根據你的目的重寫你的對象的equals方法,一切都會好的。 這是一樣的hashCode,但不改變它。默認的hashCode應該沒問題。
你應該總是覆蓋哈希碼,當你覆蓋等於,反之亦然。 _「根據定義,如果兩個對象相等,則它們的哈希碼也必須相等,如果重寫equals()方法,則會改變兩個對象的等同方式,並且Object的hashCode()實現不再有效,如果你重寫equals()方法,你也必須重寫hashCode()方法。「_ –
是的,它是完全正確的,但是如果你的代碼沒有使用hashCode,那沒關係。例如,即使我不重寫hashCode函數,該代碼仍然可以完美運行。 class Test { \t private int i; \t \t public Test(int i){ \t \t this.i = i; \t} \t \t @Override \t公共布爾等於(對象O) \t { \t \t返回this.i ==((試驗)O).I; \t} } 公共類主要{ \t \t 公共靜態無效的主要(字串[] args){ \t \t \t 測試\t T1 =新試驗(1); \t \t Test t2 = new Test(2); \t \t Test t22 = new Test(2); \t \t \t \t System.out.println(t1.equals(t2)); \t \t System.out.println(t2.equals(t22)); \t \t \t \t}} –
你錯了,因爲如果你重寫equals,你應該尊重合同'x1.equals(×2)=>(x1.hashCode()== x2.hashCode())'。 –
- 1. ArrayList作爲Hashmap中的鍵
- 2. 字符串作爲hashmap中的鍵
- 3. KeyStroke類作爲HashMap中的一個鍵
- 4. HashMap UUID或String作爲鍵?
- 5. 用Integer作爲鍵的HashMap的問題
- 6. 使用Object作爲鍵的HashMap
- 7. 字符串數組作爲HashMap的鍵
- 8. 使用引號作爲鍵的Bash hashmap
- 9. 使用HashMap作爲另一個HashMap的關鍵字
- 10. 製作一個HashMap,其鍵值爲HashSets
- 11. 如何使用int作爲HashMap鍵?
- 12. ArrayList自定義類作爲HashMap鍵
- 13. ThreadLocal可以用作HashMap中的鍵嗎?
- 14. Boolean/boolean如何作爲Java中的HashMap的關鍵字?
- 15. android.util.Pair在androidTest中保存String []作爲參數,但在(單元)中爲null測試
- 16. 使用struct作爲hashmap中的鍵。如何插入值?
- 17. JList中使用的HashMap鍵(字符串)作爲其顯示?
- 18. 如何在Java中將HashMap的鍵作爲可選項處理
- 19. 字符串作爲HashMap中的一個鍵
- 20. HashMap中的鍵 - 值映射
- 21. 爲什麼整數鍵在HashMap中不起作用?
- 22. 在Java中使用對象作爲鍵HashMap
- 23. 的java獲取HashMap的鍵作爲整數數組
- 24. 包含HashMap的地圖,無序的地圖,類作爲鍵
- 25. HashMap的雙關鍵
- 26. 製作OBJ和obj.clone()作爲HashMap中
- 27. ArrayList <X>作爲HashMap中的鍵,但X []數組不起作用
- 28. HashMap鍵和值
- 29. HashMap對象鍵
- 30. 爲什麼我可以使用字符串作爲HashMap中的鍵?
我會說是的,我會說,你可以肯定知道通過測試它。 – njzk2