比较整数的集合



对于Comparable<>的实现,我正在寻找一种比较Collection<boolean[]>的两个实例的方法。我已经通过创建一个整数表示(101==5)来比较boolean[]的,所以我将其缩小到比较两个Collection<Integer>

我该怎么做?

简单地比较每个整数是行不通的,因为给定了collectionA = {1, 2}; collectionB = {2,1},下面的例子给出了cmp == 0,而集合肯定是不同的。

int cmp = 0;
for(Integer a : collectionA)
  for(Integer b : collectionB)
    cmp += Integer.compare(a, b);

我还有什么其他选择?我真的不在乎它们是如何排序的,只是它们以组合的方式排序。集合可能有不同的大小。

编辑:我真的在找int compare(),而不是equals()。我的应用程序的实际结构的一个更具体的例子看起来像这个

class MyArray implements Comparable<MyArray> {
    boolean[] array;
    int compareTo(MyArray another) {
        // This is implemented
    }
}
class MyCollection implements Comparable<MyCollection> {
    SortedSet<MyArray> collection;
    int compareTo(MyCollection another) {
        // Looking for this implementation
    }
}

以比较字符串的方式比较列表:首先比较第一个整数,如果它们相等,则检查第二个整数,等等,直到找到不同的整数或到达列表末尾。

for(int i = 0; i < min(listA.size(), listB.size()); i++) {
    int diff = listA.get(i) - listB.get(i);
    if(diff != 0) return diff;
}
return listA.size() - listB.size();

请注意,只有对集合进行了排序,这才有效。

java集合类中内置的equals()方法已经为您完成了这项工作。

如果两个集合的大小相同,并且对于一个集合中的每个元素,另一个集合有一个相应的元素,则返回true。

List比较检查顺序,但如果使用Set,则它不关心顺序。

列表

将指定的对象与此列表进行相等性比较。当且仅当指定的对象也是一个列表,两个列表的大小相同,并且两个列表中所有对应的元素对都相等时,返回true。(如果(e1==null?e2==null:e1。equals(e2)),则两个元素e1和e2相等。)换句话说,如果两个列表以相同的顺序包含相同的元素,则它们被定义为相等。此定义确保equals方法在List接口的不同实现中正常工作。

设置

将指定的对象与此集合进行相等性比较。如果指定的对象也是一个集合,两个集合具有相同的大小,并且指定集合的每个成员都包含在此集合中(或者等效地,此集合的所有成员都包含在指定集合中),则返回true。这个定义确保equals方法在set接口的不同实现中正常工作。

相关内容

  • 没有找到相关文章

最新更新