Интерфейс List в Java предоставляет методы, позволяющие сравнивать два списка и находить общие и отсутствующие элементы в списках.
Если вы хотите проверить, что два списка равны, т.е. содержат одинаковые элементы и отображаются в одном индексе, мы можем использовать:
import java.util.Arrays; import java.util.List; public class CompareTwoLists {
public static void main(String[] args) {
List listOne = Arrays.asList('a', 'b', 'c');
List listTwo = Arrays.asList('a', 'b', 'c');
List listThree = Arrays.asList('c', 'a', 'b');
boolean isEqual = listOne.equals(listTwo);
System.out.println(isEqual);
isEqual = listOne.equals(listThree);
System.out.println(isEqual);
} }
Выход:
true false
Как видите, equals()
сравнивает элементы и их расположение в списке.
Связанный:
Содержат ли два списка одинаковые элементы?
Чтобы сравнить два списка на равенство только с точки зрения элементов независимо от их расположения, нам нужно использовать sort()
метод из Collections()
класс.
Например:
import java.util.Arrays; import java.util.Collections; import java.util.List; public class CompareTwoLists {
public static void main(String[] args) {
List listOne = Arrays.asList('b', 'c', 'a');
List listTwo = Arrays.asList('a', 'c', 'b');
List listThree = Arrays.asList('c', 'a', 'b');
Collections.sort(listOne);
Collections.sort(listTwo);
Collections.sort(listThree);
boolean isEqual = listOne.equals(listTwo);
System.out.println(isEqual);
isEqual = listOne.equals(listThree);
System.out.println(isEqual);
} }
Выход:
true true
List
интерфейс также предоставляет методы для поиска различий между двумя списками.
removeAll()
сравнивает два списка и удаляет все общие элементы. Что осталось, так это дополнительные или отсутствующие элементы.
Например, когда мы сравниваем два списка, listOne
и listTwo
и мы хотим выяснить, каких элементов не хватает в listTwo
мы используем:
import java.util.ArrayList; import java.util.Arrays; public class CompareTwoArrayLists {
public static void main(String[] args) {
ArrayList listOne = new ArrayList(Arrays.asList(1, 2, 3, 4, 5));
ArrayList listTwo = new ArrayList(Arrays.asList(1, 2, 4, 5, 6, 7));
listOne.removeAll(listTwo);
System.out.println('Missing items from listTwo ' + listOne);
} }
Выход:
Missing items from listTwo [3]
Аналогично, если мы использовали:
listTwo.removeAll(listOne); System.out.println('Missing items from listOne ' + listTwo);
Получим:
Missing items from listOne [6, 7]
retainAll()
сохраняет только те элементы, которые являются общими в обоих списках. Например:
public class CompareTwoArrayLists {
public static void main(String[] args) {
ArrayList listOne = new ArrayList(Arrays.asList(1, 2, 3, 4, 5));
ArrayList listTwo = new ArrayList(Arrays.asList(1, 2, 4, 5, 6, 7));
listOne.retainAll(listTwo);
System.out.println('Common items in both lists ' + listOne);
} }
Выход:
Common items in both lists [1, 2, 4, 5]