我有一个班级
class Foo
{
int x;
Set<Integer> set;
}
当我构建一个集合Set<Foo>
时,它会编译并运行。比较整数很简单,但Java如何比较两组?
我应该覆盖为
if(this.toBeLocalized != that.toBeLocalized)
{
if(this.set.size() == that.set.size())
{
Set<Integer> ref = new HashSet<>();
ref.addAll(this.set);
ref.removeAll(that.set);
if(ref == null)
{
return 0;
}
}
}
return -1;
}
或者对套装进行比较?
答案 0 :(得分:1)
这是来自类AbstractSet
的methd equals的实现,Set
的大多数实现都将扩展它
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Set))
return false;
Collection c = (Collection) o;
if (c.size() != size())
return false;
try {
return containsAll(c);
} catch (ClassCastException unused) {
return false;
} catch (NullPointerException unused) {
return false;
}
}
答案 1 :(得分:1)
Set
already defines .equals()
,Set
的所有实现都需要按照文档所说的方式实现(当然,它也适用于.hashCode()
。)
所以你必须:
set1.equals(set2)
请注意,合同规定元素的顺序无关紧要,因此[1, 2, 3]
和[2, 1, 3]
是相等的。这与List
不同,其中命令很重要。