如何在java中比较两个不同的列表对象?

时间:2011-03-12 13:49:17

标签: java

我有两个类列表,例如List<Aclass> A1和List<Bclass> b1,两个列表都包含一个常见的字段。那么通过使用这个字段,我必须比较这两个列表?请有人帮帮我吗?确保这些班级列表不同。

2 个答案:

答案 0 :(得分:5)

我不确定我是否完全理解这个问题,但是你要求这样的东西?

public boolean compare (List<AClass> listA, List<BClass> listB) {
    if (listA.size() != listB.size () return false;
    for (int i=0; i<listA.size(); i++) {
        AClass aClass == (AClass) listA.get(i);
        BClass bClass == (BClass) listB.get(i);
        if (aClass.commonField != bClass.commonField) return false;
    }
    return true;
}

两个列表都应按该commonField字段

排序

答案 1 :(得分:0)

结帐the javadoc for List.equals()

  

如果两个列表包含相同顺序的相同元素,则它们被定义为相等。

这里可以使用equals方法,当然忽略了你声明两个列表的泛型类型。 AbstractList的equals方法(ArrayList和一堆其他列表类实现)将迭代两个列表并按顺序调用每个元素上的equals,一旦完成,它确保没有任何项目留在列表。

鉴于这一切,您将能够调用equals方法来确定天气两个列表包含相同的元素:

List<Aclass> A1 = new ArrayList<Aclass>();
List<Bclass> b1 = new ArrayList<Bclass>();

// getElement returns a private field that can be cast to both Aclass and Bclass
A1.add(getElement());
b1.add(getElement());

if (A1.equals(b1)) {
    System.out.println("two lists are equal");
}
相关问题