2011-08-22 58 views
0

比較兩個陣列我具有相同的類的兩個實例:由散列碼

Object instance1; 
Object instance2; 

我知道有問題的類有一個陣列字段。我需要比較數組字段的identityHashCode,並且在某些情況下我希望它是相同的。

事情是他們總是不同。我猜這是可以預料的,因爲它們實際上是兩種不同的情況。

有沒有辦法比較兩個數組忽略他們持有的元素?

我正在使用Java反射來獲取數組的值。

+1

什麼?你會如何比較兩個數組*忽略他們持有的元素?那麼唯一有用的信息可能是「他們是同一個對象」,在這種情況下'=='會給你所有你需要的東西。 –

+0

您是否嘗試過使用'Arrays.hashCode()'或'Arrays.deepHashCode()'? –

+1

比較兩個數組意味着什麼,但忽略它們中的元素? – Kal

回答

1

有沒有辦法比較兩個數組,忽略它們的哪些元素 持有?

當然,你可以比較的組件類型和大小:

/** 
* Returns true iff two arrays of the same component type and 
* length are passed in. 
*/ 
public static boolean pseudoArrayEquals(Object a, Object b){ 
    if(a==null||b==null||!a.getClass().isArray()||!b.getClass().isArray()) 
     throw new IllegalArgumentException("Expected two arrays"); 
    return a.getClass() == b.getClass() 
      && Array.getLength(a) == Array.getLength(b); 
} 
0

你可以遍歷數組結束,則調用對象的方法hashCode()。但請注意,基本實現(在Object中)每個實例返回不同的哈希碼。

如果要檢查兩個數組是否包含相同的元素,但有可能在不同的順序,應該創建兩個(散)集(即Set<Object>),並呼籲臺containsAll(...)(可能是相互的,因爲組1可能是一個第2集的超集)。假設滿足equals()hashCode()的隱式合約("If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result."),則會告訴您兩個數組是否包含相同的元素。