2011-03-12 165 views
0

我有两个类列表,如List<Aclass> A1和List<Bclass> b1,两个列表都包含一个常见的字段。所以通过使用这个领域,我必须比较这两个列表?请任何人都可以帮我吗?确保这些班级名单不同。如何在java中比较两个不同的列表对象?

+0

你是什么意思一个领域是不同的?它是一个像'Person'这样的对象的列表,其中诸如'name'之类的属性是不同的?请在提问时尝试更清楚。 – adarshr 2011-03-12 13:51:34

+1

你是什么意思'比较'?你想排序列表或什么? – adarshr 2011-03-12 13:52:54

+2

而且,请不要在帖子中使用签名,它已经在这里,在帖子下面。谢谢。 – 2011-03-12 13:54:09

回答

0

结帐the javadoc for List.equals()

两个列表被定义为等于如果它们包含以相同的顺序相同的元件。

可以在这里使用equals方法,当然会忽略你声明两个列表的通用类型。 AbstractList(其中ArrayList和一堆其他列表类实现)的equals方法将遍历这两个列表,并按顺序在每个元素上调用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"); 
} 
+0

您的意思是“huGe”? – 2011-03-12 14:02:25

+0

@Yasir是的,我不知道目前发生了什么,我的键盘不公平。 – krock 2011-03-12 14:11:49

+0

学习一些触摸打字然后,节省大量的拼写错误;-) – 2011-03-12 14:22:05

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字段排序

+0

谢谢Aleadam我认为我非常接近解决方案!你正确地解决了我的问题 – vinod 2011-03-12 15:00:43

+0

@vinod:如果您认为这是解决方案,请点击帖子旁边的复选标记。 – 2011-03-13 02:12:19

+0

我编辑了几个拼写错误。请记住,这样一个简短而简单的方法只有在对列表进行排序后才会起作用。如果类字段将公开,那么你应该确保它们不是null。更好的选择是在AClass和BClass中创建一个公共方法'compareField()' – Aleadam 2011-03-13 04:46:25

相关问题