如何在java中比较泛型方法中的数组?
我有一个在构造函数中使用两个泛型参数的类。我想实现一个方法来比较这个类的两个实例,如下代码所示
除了其中一个参数是数组外,它工作得非常好。我读过关于如何将数组与java.util.Arrays.equals(Object[] a, Object[] a2)
进行比较的不同主题,但是由于我的参数没有定义为数组,所以我不能使用此方法
我的数组内容中如何返回“true”是相同的?或者可以将我的参数强制转换为使用java.util.Arrays.equals(Object[] a, Object[] a2)
public class Pair<U, V> {
public final U first;
public final V second;
public Pair(U first, V second) {
this.first = first;
this.second = second;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Pair<?, ?> myPair= (Pair<?, ?>) o;
if (!first.equals(myPair.first) || !second.equals(myPair.second))
return false;
return true;
}
}
# 1 楼答案
你可以这样做:
但是不要搞错:让
equals()
实现正确,并使用继承和其他东西。。。这将是一个重大挑战例如:你认为一个int数组是否等于一个整数值列表(假设所有的值都是相同的)?或者嵌套数组呢
这里真正的要点是:Java对数组没有深度相等,而且几乎不可能自己涵盖所有潜在的情况
# 2 楼答案
值得注意的是,据我所知,Java中没有任何集合——成对、列表、集合……-对这个案子做出让步。例如:
输出:false
两个集合的相等只能由其元素的相等来决定。除此之外的任何事情都会让你的班级合同变得越来越模糊
Java中的数组不重写equals。这是一个已经做出的设计决定。你的工作不是试图通过破解你的实现来纠正你认为是错误的决定
所以,简而言之,你没有
# 3 楼答案
# 4 楼答案