我有两个同一个类的实例:
Object instance1;
Object instance2;
我知道有问题的类有一个数组字段。我需要比较数组字段的identityHashCode,在某些情况下我希望它是相同的。
事情是他们总是不同的。我猜这是预期的,因为它们实际上是两个不同的实例。
有没有办法比较两个数组而忽略它们所持有的元素?
我正在使用Java反射来获取数组的值。
答案 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."
),那将告诉您两个数组是否包含相同的元素。