通过哈希码比较两个数组

时间:2011-08-22 13:52:25

标签: java arrays reflection

我有两个同一个类的实例:

Object instance1;
Object instance2;

我知道有问题的类有一个数组字段。我需要比较数组字段的identityHashCode,在某些情况下我希望它是相同的。

事情是他们总是不同的。我猜这是预期的,因为它们实际上是两个不同的实例。

有没有办法比较两个数组而忽略它们所持有的元素?

我正在使用Java反射来获取数组的值。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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."),那将告诉您两个数组是否包含相同的元素。