比較兩個陣列我具有相同的類的兩個實例:由散列碼
Object instance1;
Object instance2;
我知道有問題的類有一個陣列字段。我需要比較數組字段的identityHashCode,並且在某些情況下我希望它是相同的。
事情是他們總是不同。我猜這是可以預料的,因爲它們實際上是兩種不同的情況。
有沒有辦法比較兩個數組忽略他們持有的元素?
我正在使用Java反射來獲取數組的值。
比較兩個陣列我具有相同的類的兩個實例:由散列碼
Object instance1;
Object instance2;
我知道有問題的類有一個陣列字段。我需要比較數組字段的identityHashCode,並且在某些情況下我希望它是相同的。
事情是他們總是不同。我猜這是可以預料的,因爲它們實際上是兩種不同的情況。
有沒有辦法比較兩個數組忽略他們持有的元素?
我正在使用Java反射來獲取數組的值。
有沒有辦法比較兩個數組,忽略它們的哪些元素 持有?
當然,你可以比較的組件類型和大小:
/**
* 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);
}
你可以遍歷數組結束,則調用對象的方法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."
),則會告訴您兩個數組是否包含相同的元素。
什麼?你會如何比較兩個數組*忽略他們持有的元素?那麼唯一有用的信息可能是「他們是同一個對象」,在這種情況下'=='會給你所有你需要的東西。 –
您是否嘗試過使用'Arrays.hashCode()'或'Arrays.deepHashCode()'? –
比較兩個數組意味着什麼,但忽略它們中的元素? – Kal