Как удалить из arraylist java повторяющиеся элементы
Перейти к содержимому

Как удалить из arraylist java повторяющиеся элементы

  • автор:

Удаление всех дубликатов из списка в Java

В этом кратком руководстве мы узнаем , как удалить повторяющиеся элементы из списка. Сначала мы будем использовать обычную Java, затем Guava и, наконец, решение на основе Java 8 Lambda.

Этот учебник является частью серии « Java — Back to Basic » здесь, на ForEach.

2. Удалите дубликаты из списка, используя обычную Java

Мы можем легко удалить повторяющиеся элементы из списка с помощью стандартной Java Collections Framework через Set :

 public void   givenListContainsDuplicates_whenRemovingDuplicatesWithPlainJava_thenCorrect()    ListInteger> listWithDuplicates = Lists.newArrayList(5, 0, 3, 1, 2, 3, 0, 0);   ListInteger> listWithoutDuplicates = new ArrayList>(   new HashSet>(listWithDuplicates));    assertThat(listWithoutDuplicates, hasSize(5));   assertThat(listWithoutDuplicates, containsInAnyOrder(5, 0, 3, 1, 2));   > 

Как мы видим, исходный список остался без изменений.

В приведенном выше примере мы использовали реализацию HashSet , которая представляет собой неупорядоченную коллекцию. В результате порядок очищенного listWithoutDuplicates может отличаться от порядка исходного listWithDuplicates .

Если нам нужно сохранить порядок, мы можем вместо этого использовать LinkedHashSet :

 public void   givenListContainsDuplicates_whenRemovingDuplicatesPreservingOrderWithPlainJava_thenCorrect()    ListInteger> listWithDuplicates = Lists.newArrayList(5, 0, 3, 1, 2, 3, 0, 0);   ListInteger> listWithoutDuplicates = new ArrayList>(   new LinkedHashSet>(listWithDuplicates));    assertThat(listWithoutDuplicates, hasSize(5));   assertThat(listWithoutDuplicates, containsInRelativeOrder(5, 0, 3, 1, 2));   > 

3. Удалить дубликаты из списка с помощью гуавы

Мы можем сделать то же самое, используя Guava:

 public void   givenListContainsDuplicates_whenRemovingDuplicatesWithGuava_thenCorrect()    ListInteger> listWithDuplicates = Lists.newArrayList(5, 0, 3, 1, 2, 3, 0, 0);   ListInteger> listWithoutDuplicates   = Lists.newArrayList(Sets.newHashSet(listWithDuplicates));    assertThat(listWithoutDuplicates, hasSize(5));   assertThat(listWithoutDuplicates, containsInAnyOrder(5, 0, 3, 1, 2));   > 

Здесь также первоначальный список остается без изменений.

Опять же, порядок элементов в очищаемом списке может быть случайным.

Если мы используем реализацию LinkedHashSet , мы сохраним исходный порядок:

 public void   givenListContainsDuplicates_whenRemovingDuplicatesPreservingOrderWithGuava_thenCorrect()    ListInteger> listWithDuplicates = Lists.newArrayList(5, 0, 3, 1, 2, 3, 0, 0);   ListInteger> listWithoutDuplicates   = Lists.newArrayList(Sets.newLinkedHashSet(listWithDuplicates));    assertThat(listWithoutDuplicates, hasSize(5));   assertThat(listWithoutDuplicates, containsInRelativeOrder(5, 0, 3, 1, 2));   > 

4. Удаление дубликатов из списка с помощью Java 8 Lambdas

Наконец, давайте рассмотрим новое решение, использующее лямбда-выражения в Java 8. Мы будем использовать метод different () из Stream API, который возвращает поток, состоящий из отдельных элементов, на основе результата, возвращаемого методом equals() .

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

 public void   givenListContainsDuplicates_whenRemovingDuplicatesWithJava8_thenCorrect()    ListInteger> listWithDuplicates = Lists.newArrayList(5, 0, 3, 1, 2, 3, 0, 0);   ListInteger> listWithoutDuplicates = listWithDuplicates.stream()   .distinct()   .collect(Collectors.toList());    assertThat(listWithoutDuplicates, hasSize(5));   assertThat(listWithoutDuplicates, containsInAnyOrder(5, 0, 3, 1, 2));   > 

Итак, у нас есть три быстрых способа удалить все повторяющиеся элементы из списка.

5. Вывод​

В этой статье мы продемонстрировали, как легко удалить дубликаты из списка с помощью простой Java, Google Guava и Java 8.

Реализацию всех этих примеров и сниппетов можно найти в проекте GitHub . Это проект на основе Maven, поэтому его легко импортировать и запускать.

  • 1. Введение
  • 2. Удалите дубликаты из списка, используя обычную Java
  • 3. Удалить дубликаты из списка с помощью гуавы
  • 4. Удаление дубликатов из списка с помощью Java 8 Lambdas
  • 5. Вывод

Как удалить одинаковые элементы ArrayList

Есть ArrayList. Он String. Там куча ссылок на картинки. Некоторые ссылки повторяются. Как удалить повторяшки?
2 for тут не подходит. Потому что меняется количество элементов в Array.
Мне говорили, что «итератором нужно». Но к какому месту его приложить так и не объяснили.
Подскажите пожалуйста.

ПС элементы не сортированные. То есть одинаковым может быть 5 10 и 25 элемент

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как представить элементы java.ArrayList содержащие другие java.ArrayList в виде XML — XSL?
Здравствуйте Вопрос: Подскажите пожалуйста чайнику, как можно представить элементы.

Удалить одинаковые элементы таблицы
Таблица задана как List<List<Integer>> table = . это нельзя менять по условию задачи, нужно.

Найти и удалить в строке одинаковые элементы, идущие друг за другом
Задание — "Разработать программу, которая вводит текст, заменяет в нем стоящие подряд одинаковые.

Как удалить одинаковые элементы из массива?
Подскажите как удалить одинаковые элементы или например все одинаковые цифры (2) из одномерного.

Удаление повторяющихся элементов из ArrayList в Java

Часто в процессе работы с коллекциями в Java возникает необходимость удалить повторяющиеся элементы. Рассмотрим пример: есть ArrayList , который содержит несколько одинаковых строк. Задача состоит в том, чтобы оставить только уникальные строки, то есть удалить повторения.

ArrayList<String> list = new ArrayList<String>(); list.add("Java"); list.add("Python"); list.add("Java"); list.add("Ruby"); list.add("Python");

В данном примере, строки «Java» и «Python» повторяются два раза. В итоге, нужно получить ArrayList без повторений: «Java», «Python», «Ruby».

Существует несколько способов решения данной задачи.

Использование HashSet

Один из простейших способов — использование HashSet . HashSet в Java представляет собой коллекцию, которая не содержит повторяющихся элементов. При добавлении элемента в HashSet , который уже там присутствует, он просто не будет добавлен.

Set<String> set = new HashSet<>(list);

Далее, можно преобразовать HashSet обратно в ArrayList следующим образом:

list.clear(); list.addAll(set);

В результате, ArrayList list будет содержать только уникальные строки.

Использование Stream API

В Java 8 было введено Stream API, которое также позволяет решить данную задачу. С помощью метода distinct() , который возвращает стрим без дубликатов, можно удалить повторяющиеся элементы:

List<String> unique = list.stream().distinct().collect(Collectors.toList());

В данном случае, создается новый ArrayList unique , который содержит только уникальные строки из list .

Оба представленных способа эффективны для удаления повторяющихся элементов из ArrayList в Java. Выбор конкретного метода зависит от конкретных условий и требований к коду.

Удалить дубликаты из списка в Java

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

1. Обычная Java

Мы знаем, что множество не допускает повторяющихся элементов. Итак, если мы преобразуем данный список с дубликатами в набор, мы получим набор элементов из списка без дубликатов. Если мы преобразуем набор обратно в список, мы получим список без дубликатов.

Обратите внимание, что HashSet разрушит порядок элементов. Чтобы сохранить исходный порядок, мы можем использовать LinkedHashset вместо.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *