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

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

  • автор:

Сравнить две коллекции

Author24 — интернет-сервис помощи студентам

есть два HashSet
В первом 10млн строк
во втором 50млн.

нужно найти содержит ли второй сет строки присутствующие в первом.

Подскажите пожалуйста какой способ будет максимально эффективным?

Сеты вроде самые быстрые(?) поэтому использую их. Может другие коллекции более эффективны? Изначально это были ArrayList и я из них перегоняю сначала в сет потом хочу сравнить. Это правильный путь?

Добавлено через 2 часа 34 минуты
Может я как-то криво написала.

Есть множество HashSet [a, b, c, d, f, h]
есть множество HashSet2 [s, t, a, с]

нужно получить HashSet3=

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

Сравнить две коллекции объектов по одному одинаковому полю
Народ, доброе утро всем! У меня есть две коллекции List. AArrayList<MyRequest>.

Сравнить 2 коллекции
Простите если не туда написал. Как сравнить 2 коллекции? ArrayList<Ware> ls1 и ArrayList<Ware>.

Сравнить две строки на соответствие
Здравствуйте! Подскажите пожалуйста, какая ошибка в этом коде; если я всё правильно понял, то.

Сравнить две String в формате UTF-8
Уважаемые форумчане. в соседней теме никто не ответил, потому попробую задать вопрос в новой теме.

Эксперт Java

3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220

Лучший ответ

Сообщение было отмечено Sma6nta как решение

Решение

в апаче коммонс есть ListUtils, а в нем есть intersection
Регистрация: 12.05.2019
Сообщений: 201

еще нашла вот такой вариант

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Возможно ли заполнить две коллекции Map сущностями одного типа в Spring Data JPA
Доброго всем времени суток. Подскажите пожалуйста, вот имеется сущность @Entity @Table(name =.

Как сравнить две переменные в session.createQuery
при формировании результирующего списка поиска нужно сравнивать 2 переменные даты. Первая из них.

Сравнить две коллекции с большим набором свойств, полученных от Get-Member
Есть две коллекции объектов $q1 и $q2, получаемые с помощью специфичного командлета (очереди WMQ).

AutoCompleteBox и две коллекции
Здравствуйте! Технология Silverlight Паттерн MVVM Prism (хотя вышеперечисленное вроде и.

Получение новой коллекции путем фильтрации элементов коллекции находящихся в другой коллекции
Всем привет, нуждаюсь в помощи знатоков) Имеется вот такая иерархия если представить в JSON:

Как связать две коллекции в разных классах?
Как связать 2 коллекции и каждая коллекция находиться в своём классе, то есть взаимодействие между.

Или воспользуйтесь поиском по форуму:

Как сравнить два списка 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, но он не будет сортировать массивы и надеюсь решит поставленные задачи. Ваш вариант мне тоже нравится.

Как сравнить два ArrayList`a по их содержимому?

Я бы сделал так:
1. Сделал бы мапу из обоих листов, где ключ — номер, счёта, а значение — сам объект.
2. По этому ключу объединил бы обе мапы в одну, но значение было бы Tupple2 . Т.о. в одном таппле были бы оба объекта с одинаковыми номером счета.
3. По значениям в итоговой коллекции можно будет производить все интересующие операции.

Ответ написан более двух лет назад
Нравится 1 4 комментария
Odissey Nemo @odissey_nemo

Да, это было бы эффективнее, хотя тоже не слишком понятно с первого взгляда.

Наблюдал, что просто использование стримов, где только можно, резко тормозит скорость работы программы.
Старые добрые и простые коллекции , в этом плане, гораздо быстрее. Хотя бы за счёт вынужденной продуманности их применения.

Я так понимаю, человеку надо найти в двух списках все одинаковые чеки PaymentPartner и PaymentRBS с одинаковыми номерами счетов и суммами в них?
При этом ведь могут быть даже одинаковые чеки с теми же суммами в любом списке, например.
Если да то, может быть, удастся обойтись одним Set, если бы оба класса были бы одинаковыми или имели общий интерфейс/класс-предок для getAccount и getSum(). И переписать у них hashCode() и equals() так, чтобы они захватывали и аккаунт и сумму.
hasCode() можно сделать как для строки, состоящей из текстовых представлений аккаунта и суммы, через запятую. Например:

public int hashCode()

В этом случае Set заполнить из списка rbsList. Затем пройтись по всему списку из partnerList, изучая. если ли элементы из него уже в Set. Те элементы из partnerList, что уже присутствуют в Set и есть искомые PaymentPartner. имеющие аналог в rbsList.
Итого — всего по одному проходу по каждому списка (N+M). В отличи от M*N сравнений в указанном коде.
Не уверен точно, но кажется работоспособным. С учётом высказанных выше пожеланий к классам.

student_1 @student_1 Автор вопроса

Я так понимаю, человеку надо найти в двух списках все одинаковые чеки PaymentPartner и PaymentRBS с одинаковыми номерами счетов и суммами в них?

Dmitry Roo @xez Куратор тега Java

Наблюдал, что просто использование стримов, где только можно, резко тормозит скорость работы программы.
Старые добрые и простые коллекции , в этом плане, гораздо быстрее. Хотя бы за счёт вынужденной продуманности их применения.

Как по мне, решения через «циклы + коллекции» ни разу не простые. Стримы немного понятнее и проще.
Насчёт скорости работы — очень хочется посмотреть пруфы (если есть)

Odissey Nemo @odissey_nemo

Dmitry Roo,
Дело вкуса. Мне привычнее и понятнее циклы и коллекции. Стримы просто без надобности.
Хотя не отрицаю, что кода с ними меньше. Но меньше — не значит понятнее. Чем выше абстракция, тем она обычно сложнее.

Пруфы в Инете не искал. Делал сам.
А циклы и коллекции быстрее по простой причине. Стримы слишком универсальны. должны удовлетворить всем типам данных. Поэтому с помощью них трудно выбрать все варианты и особенности структур данных. Например, в одном цикле можно сделать несколько произвольных операций над элементом коллекции, что является естественным.
В то же время стримы. их операторы делают что-либо на лету, за один проход. Стало быть. понадобится несколько проходов для доступа к разным элементам и их данным.
Грубо говоря, там где надо два стрима запустить, достаточно одного цикла.
В любом случае, разница в производительности вряд ли будет критической. Главное — понятность и ясность кода для автора. И для будущих читателей.
Это — главное!

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

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