比较整数集合

时间:2013-12-13 13:14:29

标签: java compare

对于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
    }
}

2 个答案:

答案 0 :(得分:2)

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

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();

请注意,这仅适用于您的馆藏。

答案 1 :(得分:1)

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

如果两个集合的大小相同,则它们返回true;对于一个集合中的每个元素,它们在另一个集合中都有相应的元素。

List比较检查订单,但如果您使用Set代替,那么它不关心订单。

<强>列表

  

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

设置

  

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