看起來像int []的hashCode()和equals()很差實現,或根本沒有實現! (使用Android進行測試,但我希望它適用於任何Java環境)。hashCode和equals在int []中的實現Java
爲了得到HashSet.contains()正常工作,我不得不創建INT []的包裝(PLSE,不要批評我的編碼風格,看本質):
public class IntArray {
private int[] value;
public IntArray(int[] value) {
this.value = value;
}
@Override
public int hashCode() {
int sum = 0;
// Integer overflows are cheerfully welcome.
for (int elem: value) sum += elem;
return sum;
}
@Override
public boolean equals(Object o) {
if (o == null) return (value==null);
if (value != null) {
if (o instanceof int[])
return compare((int[])o);
if (o instanceof IntArray)
return compare(((IntArray)o).value);
}
return false;
}
protected boolean compare(int[] other) {
int len = value.length;
if (other.length != len) return false;
for (int i=0; i<len ; i++)
if (value[i] != other[i]) return false;
return true;
}
}
工作正常,但我更喜歡避免自定義包裝或第三方庫。有沒有選擇?
「* hashCode()和equals()for int []實施得不好,或根本沒有實現*」小心細化? –
hashCode和equals對於數組本質上默認爲Object中的實現,它只會找到一個等於它自己的對象。這並不是「執行不力」,當然也不是「完全沒有實施」,而是按照定義實施。然而,你的情況並非如此,我們可以說,「滿意」是正確的。 –
是不是'ArrayList'你正在尋找的包裝? –