public Class myClass{
private final int[][] board;
}
LinkedHashMap<Integer,Object> myMap
其中Integer是一個哈希碼我創建使用Arrays.deepHashCode
public int hashCode() {
int hash = 5;
hash = 89 * hash + Arrays.deepHashCode(this.board);
return hash;
}
public boolean equals(Object anObject) {
if (anObject == null) return false;
if (anObject == this) return true;
if (!(anObject instanceof myClass))return false;
Puzzle anotherClass = (myClass)anObject;
return Arrays.deepEquals(this.board,anotherClass.board);
}
我得到新的對象,我需要將它們添加到myMap
只有當它們不存在。 我試圖用myMap.containsKey(hashcode)
檢查哈希碼,顯然我得到了不同對象的重複哈希碼。
我試圖檢查進一步的細節,當我從myMap.containsKey(hashcode)
成爲true,但然後我不能將它們添加到myMap,因爲它們具有相同的鍵!
是否有任何解決此問題的方法,因爲使用ArrayList
和檢查是非常緩慢的,我有大量的迭代。
你不應該使用'Integer'作爲地圖的關鍵;你應該使用'Board'對象作爲鍵,這應該是'Board.hashCode()'的實現。 –
你的董事會有多大?順便說一句,請不要命名類「對象」。 – kennytm
爲什麼你還需要使用Map?如果你只想擁有一個不允許重複輸入的「列表」,那麼使用一個簡單的Set即可。 –