Как сравнить две коллекции java
Перейти к содержимому

Как сравнить две коллекции java

  • автор:

Как сравнить два списка java

Чтобы сравнить два списка в Java , можно использовать метод equals() из класса java.util.List . Этот метод сравнивает содержимое двух списков.

import java.util.Arrays; import java.util.List; public class ListComparisonExample  public static void main(String[] args)  // Создаем два списка ListInteger> list1 = Arrays.asList(1, 2, 3); ListInteger> list2 = Arrays.asList(1, 2, 3); // Сравниваем два списка if (list1.equals(list2))  System.out.println("Списки равны"); > else  System.out.println("Списки не равны"); > > > 

В этом примере списки list1 и list2 содержат одни и те же элементы в том же порядке, поэтому метод equals() вернет true

Java. ArrayList. Сравнить содержимое двух листов без учета последовательности

Необходим метод выясняющий равны ли значения их ячеек без учета их порядка и последовательности то есть эти можно считать равными = true; Имея в виду что таких элементов может быть и много. Можно использовать любые фичи кроме фраимворков. Может есть короткий способ, наверняка сан предусмотрел такое дело. Может кто знает?

Отслеживать
задан 8 ноя 2016 в 11:44
5,327 11 11 золотых знаков 58 58 серебряных знаков 117 117 бронзовых знаков
containsAll(Collection c) пробовали?
8 ноя 2016 в 11:48

@MrFylypenko если у второго списка, например, убрать один из «a» (например последний), то containsAll покажет true все равно

8 ноя 2016 в 11:54
Не знал про этот метод спасибо!
8 ноя 2016 в 11:55

@АлексейШиманский верно, покажет true, но он не будет сортировать массивы и надеюсь решит поставленные задачи. Ваш вариант мне тоже нравится.

Как сравнить две коллекции java

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

Майя Уровень 35
4 июля 2023
понятно в чем разница! хорошее объяснение
30 апреля 2023
Хорошо написана статья, но хочется продолжения! Согласна с DagothUr, как быть с String?
DagothUr Уровень 15
23 февраля 2023
Вот показали, как с числовыми значениями, а с String? По hash сортировать что ли String?
16 января 2023

Нифига не пойму. Так с Comparable тоже можно сравнить по скорости. Так в чем разница сравнения между Comparable и Comparator? Зачем мне создавать отдельный класс для сравнения того, что можно сравнить с помощью compareTo()? Уже третий день ищу разницу. И везде пишут, «Нуууу, с компарабл можно сравнить по скорости естественной сортировкой, а вот с компаратором зато можно сравнить по скорости неестественной соритровкой, ведь числа то нельзя сравнивать естественной, что вы!» Где разница то?

Kurama Уровень 50
11 ноября 2022
Хоть мы и приходили это кучу раз, но не забываем про сахар:

 Collections.sort(cars, (o1, o2) -> o1.getMaxSpeed() - o2.getMaxSpeed()); 

или вообще

 cars.sort((o1, o2) -> o1.getMaxSpeed() - o2.getMaxSpeed()); 

Сергей Дьяконов Уровень 47
11 октября 2022

тут вроде ошибка, public class MaxSpeedCarComparator должен быть STATIC. в таком виде как здесь его объект не создается в MAIN.

Проверьте, равны ли два списка в Java

Списки на Java упорядочены по природе. Таким образом, два списка считаются равными, если они содержат одинаковые элементы в одинаковом порядке. В этом уроке мы увидим, как сравнить два списка на равенство в Java.

Мы также рассмотрим способы сравнения элементов в двух списках и игнорирования их порядка.

Порядок поддержания равенства списков:

Как мы знаем, два списка равны, когда они имеют одинаковые элементы и в одинаковом порядке. Поэтому, если мы заботимся о порядке, мы можем использовать метод equals () для проверки равенства:

public void equalityCheckOfTwoLists() < List list1 = Arrays.asList( 1 , 2 , 3 );
List list2 = Arrays.asList( 1 , 2 , 3 );
List list3 = Arrays.asList( 2 , 1 , 3 );
assertTrue(list1.equals(list2));
assertFalse(list1.equals(list3));

И list1, и list3 содержат одинаковые элементы , но в разных порядках и поэтому считаются неравными.

Порядок игнорирования равенства списков:

Что если мы хотим игнорировать порядок элементов для проверки на равенство?

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

1. Сортировка списков и сравнение:

Если оба списка нулевые , мы вернем true . Или же, если только один из них указывает на нулевое значение или размер () двух списков отличается, мы вернем false . Если ни одно из этих условий не выполняется, мы сначала отсортируем два списка, а затем сравним их:

public > boolean isEquals(List list1, List list2)
if (list1 == null && list2 == null ) < return true ; //Only one of them is null else if (list1 == null || list2 == null ) < return false ; else if (list1.size() != list2.size()) < return false ; //copying to avoid rearranging original lists list1 = new ArrayList(list1);
list2 = new ArrayList(list2);
Collections.sort(list1);
Collections.sort(list2);
return list1.equals(list2);

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

2. С помощью Set / содержит () Проверьте:

Если данные в наших списках уникальны, т.е. нет дублирования, мы можем просто создать TreeSets из заданных списков и затем сравнить их с помощью equals () :

public > boolean isEquals(List list1, List list2)
if (list1 == null && list2 == null ) < return true ; //Only one of them is null else if (list1 == null || list2 == null ) < return false ; else if (list1.size() != list2.size()) < return false ; Set set1 = new TreeSet<>(list1);
Set set2 = new TreeSet<>(list2);
return set1.equals(set2);

Мы можем еще больше упростить это, просто установив проверку на проверку содержимого () вместо создания наборов :

return list1.containsAll(list2) && list2.containsAll(list1);

Однако обратите внимание, что эти подходы ( contains () check / With Sets ) потерпят неудачу, если в нашем наборе данных есть повторы. Например:

List list1 = Arrays.asList( 1 , 2 , 3 , 3 );
List list2 = Arrays.asList( 3 , 1 , 2 , 2 );
// will return true, but actual value should be false
System.out.println(list1.isEquals(list2));

В приведенном выше примере l ist1 содержит одно 2 и два 3, а list2 содержит два 2 и одно 3 . Тем не менее, эта форма реализации будет неверно возвращать true .

3. Apache Commons:

Вместо написания собственного кода мы можем выбрать для выполнения утилиту Apache Commons Collections :

List list1 = Arrays.asList( 1 , 2 , 3 , 3 );
List list2 = Arrays.asList( 3 , 1 , 3 , 2 );
System.out.println(CollectionUtils.isEqualCollection(list1, list2)); //true

Метод isEqualCollection () возвращает true, если две коллекции содержат абсолютно одинаковые элементы с одинаковым количеством элементов.

Вывод:

В этом уроке мы научились проверять, равны ли два списка в Java. Теперь мы знаем, что по умолчанию два списка равны, если они имеют одинаковые элементы в одинаковом порядке.

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

Оставьте первый комментарий.

Опубликовано на Java Code Geeks с разрешения Шубхры Шриваставы, партнера нашей программы JCG . Смотрите оригинальную статью здесь: Проверьте, равны ли два списка в Java

Мнения, высказанные участниками Java Code Geeks, являются их собственными.

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

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