比较两个阵列我具有相同的类的两个实例:由散列码
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