Java: Списки
2026-02-26 16:32 Diff

Помимо рассмотренных операций над списком, есть набор операций, которые выполняются между двумя и более списками. Среди них:

  • Расширение одного списка элементами другого списка.
  • Поиск общих элементов в двух и более списках.
  • Поиск элементов, которые есть в одном списке, но нет в другом.
  • Поиск элементов, которые уникальны для двух списков

Рассмотрим некоторые из них, с которыми вы наверняка будете сталкиваться в реальной жизни.

Копирование списков

Копирование само по себе редко является самоцелью, но часто используется для каких-то других операций, в том числе тех, что мы рассмотрим в этом уроке. Самый простой способ копировать список — создать новый список с исходным списком, переданным как параметр:

В примере выше получилось два независимых списка. Изменение одного не приводит к изменениям другого. Но так происходит не всегда. Если список состоит из объектов, которые можно менять, тогда изменение объекта в одном списке, повлияет и на другой, так как копирование списков не копирует элементы списка.

Сравнение списков

Как и копирование обычно нужно в рамках каких-то других операций. В самом простом случае бывает нужно сравнить равенство двух списков между собой. Так как списки это объекты, мы не можем сравнивать их напрямую, в таком случае будут сравниваться ссылки. Для правильного сравнения понадобится метод equals()

Метод equals() проверяет не только совпадение элементов, но и их порядок.

Кроме полного сопоставления, мы можем проверять вхождение одного списка в другой:

Слияние списков

Операция выполняется с помощью метода addAll(), который добавляет в коллекцию поэлементно другую коллекцию, переданную как параметр. Этот метод меняет исходную коллекцию:

Иногда нужно получить общий список, не меняя исходного. В таком случае можно воспользоваться копированием:

Объединение списков

Операция объединения списков отличается от операции слияния. Объединение подразумевает то, что если элементы присутствуют в обоих списках, в результирующий список они попадут лишь в одном экземпляре. Подобная операция реализуется с помощью CollectionUtils.union()

Пересечение списков

Под пересечением понимается поиск общих элементов, то есть тех, которые есть и в первом, и во втором списке. Пересечение выполняется с помощью метода retainAll(). Этот метод меняет исходную коллекцию.

Если исходные коллекции должны остаться в неизменном виде, то снова поможет копирование списков.

То же самое с использованием CollectionUtils.intersection()

Разность списков

Под разностью понимается коллекция, состоящая из элементов первой коллекции, которых нет во второй. Java не предоставляет метода для решения этой задачи, поэтому у нас есть два варианта, либо реализовывать эту логику самостоятельно на циклах, либо воспользоваться CollectionUtils.subtract().