2011-08-22 55 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."),则会告诉您两个数组是否包含相同的元素。