Если вы хотите сравнить два списка, вам придется перебирать обоих, но если ваши списки сортируются и вы хотите только знать, если они равны аль или нет, то у вас есть только проверить каждый элемент списка в обоих списках один раз, что должно быть намного быстрее, в конце концов, для больших списков:
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(...)
Person
класс, если вы всегда сравнить имя и возраст. Затем сравнение может быть сокращено до person1.equals(person2)
в вашем коде.
В качестве альтернативы используйте интерфейс Comparable
, который добавляет к вашему классу метод int compareTo(T object)
, который делает то же самое, что и Comparator
.
Единственный способ, которым это могло бы работать, это если метод '.equals()' был переопределен. В противном случае он проверит ссылку на объекты. – CraigR8806
Что делать, если не все участники равны? – ct2602
Я получил это неправильно, спасибо, что указал на это. Обновленный ответ. – SporreKing