Java比较集如何?

时间:2014-05-09 17:17:19

标签: java set comparison

我有一个班级

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;
    }

或者对套装进行比较?

2 个答案:

答案 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不同,其中命令很重要。