Java Сравнить два списка

Интерфейс 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]