如果您想将两个列表进行比较,你将不得不遍历两个,但如果你的名单分类而您只需要要知道,如果他们是平等的人还是没有,那么你只需要检查两个列表一次的每个列表元素,这应该是在年底快得多大名单:
public boolean compareTwoLists(List<Person> list1, List<Person> list2) {
// Lists don't have the same size, objects missing in
// list one or two. I your lists have the same size, skip this.
if (list1.size() != list2.size() {
return false;
}
Iterator<Person> it1= list1.iterator();
Iterator<Person> it2= list2.iterator();
while (it1.hasNext()) {
Person person1 = it1.next();
Person person2 = it2.next();
// Age or name do not match, objects differ, lists are not equal.
if ((!person1.next().getAge().equals(person2.getAge()) || (!person1.getName().equals(person2.getName()))))
return false;
}
// All items are the same.
return true;
}
此外,你可以写你的方法Comparator
,这使得它更可重复使用的或适合的排序,因为你可以返回0
(名单是相等的),-1
(第一个列表较小),1
(第一清单中大)或你的目的其他的含义:
class PersonListComparator implements Comparator<List<Person>> {
@Override public int compare(List<Person> list1, List<Person> list2) {
// Your code
}
}
你也可以考虑重写的equals(...)
方法类,如果你总是比较名称和年龄。然后,您的代码中的比较可以缩短为person1.equals(person2)
。
或者,使用Comparable
接口,该接口向类中添加方法int compareTo(T object)
,与Comparator
的做法相同。
这会工作的唯一方法是,如果'.equals()'方法已被重写。否则,它会检查对象引用。 – CraigR8806
如果不是所有的成员都是平等的呢? – ct2602
我错了,谢谢你指出。更新了答案。 – SporreKing