Java collection сравнение

Обновлено: 06.07.2024

как бы вы кратко утверждали равенство collections элементы, в частности a Set на JUnit 4 ?

вы можете просто утверждать, что два набора равны друг другу, что вызывает набор метод equals ().

этот тест пройдет, если два множества имеют одинаковый размер и содержат одинаковые элементы.

Apache commons снова на помощь.

работает как шарм. Я не знаю почему, но я обнаружил, что с коллекциями следующее assertEquals(coll1, coll2) не всегда работает. В случае, когда это не удалось для меня, у меня было две коллекции, поддерживаемые наборами. Ни hamcrest ни с JUnit хочу сказать, что коллекции были равны, хотя я точно знал, что они были. Использование CollectionUtils работает отлично.

С простым утверждением:

NB: t метод equals () метода конкретный набор класс используется

особенно интересный случай, когда вы сравниваете

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

или я мог бы сравнить их поэлементно.

как дополнительный метод, основанный на массиве . вы можете рассмотреть возможность использования неупорядоченных утверждений массива в junitx . Хотя пример Apache CollectionUtils будет работать, там также есть pacakge расширений твердых утверждений:

подход будет гораздо более читаемым и отлаживаемым для вас (все коллекции поддерживают toArray(), поэтому использовать методы ArrayAssert должно быть достаточно просто.

конечно недостатком здесь является то, что junitx является дополнительным файлом jar или записью maven.

это работает также, когда наборы имеют разные типы данных и отчеты о разнице, а не просто сбой.

Если вы хотите проверить, содержит ли список или набор набор определенных значений (вместо сравнения его с уже существующей коллекцией), часто метод toString коллекций удобен:

Это немного короче, чем первое построение ожидаемой коллекции и сравнение ее с фактической коллекцией, и легче писать и исправлять.

(по общему признанию, это не особенно чистый метод и не может отличить элемент "foo, bar" от два элемента "foo"и " bar". Но на практике я думаю, что самое главное, что писать тесты легко и быстро, иначе многие разработчики просто не будут без нажатия.)

мне нравится решение Ханс-Петер Störr. Но я думаю, что это не совсем правильно. К сожалению, containsInAnyOrder не принимаются Collection из objetcs для сравнения. Так что это должно быть Collection of Matcher s:

У меня есть две коллекции в Java-класс.Первая коллекция содержит предыдущие данные, вторая содержит обновленные данные из предыдущей коллекции.

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

на основе того, что тип карт одинаковый в каждой коллекции, я хочу выполнить метод carType.

любая помощь оценили

трудно помочь, потому что вы не сказали нам как вам нравится сравнивать коллекции (равного размера). Некоторые идеи, надеясь, что один подойдет:

сравнить обе коллекции, если они содержат одни и те же объекты в том же порядке

сравнить обе коллекции, если они содержат одни и те же объекты в любом порядке

найти элементы в другой коллекции, которая имеет изменено

основываясь на вашем комментарии, этот алгоритм сделает это. Он собирает все автомобили, которые были обновлены. Если результатом метода является пустой список, обе коллекции содержат одинаковые записи в одном порядке. Алгоритм использует о правильной реализации equals() на Car тип!

из арифметики множеств A и B равны iff a subsetequal B и B subsetequal A. Таким образом, в Java, учитывая две коллекции A и B, вы можете проверить их равенство без учета порядка элементов с

  • повторите первую коллекцию и добавьте ее в Map<Entity, Integer> whereby Entity класс хранится в вашей коллекции и Integer представляет количество раз, когда это происходит.
  • повторите вторую коллекцию и для каждого элемента попытайтесь найти ее в Map - если он существует, то уменьшите Integer value by one и выполните любое действие, необходимое при обнаружении совпадения. Если Integer значение достигло нуля, затем удалите (Entity, Integer) запись с карты.

этот алгоритм будет работать в линейном времени, предполагая, что вы реализовали эффективный hashCode() метод.

Как Java быстро сравнивает две коллекции, точно так же в java?

если этот набор Set, сравните их, включите один и тот же объект, и их размер будет таким же.

Код выглядит следующим образом:

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

Спасибо всем, на самом деле, метод Collection equals может это сделать, включая Set и List.

Различные классы сбора будут иметь свои собственные реализации этого метода, настроенные на их соответствующие семантические модели и представления. Так, например, метод equals в List учитывает порядок элементов, но метод equals в Set обычно не будет.

мы используем containsAll (Collection).

То же самое относится к использованию retainsAll .

Метод HashSet.equals уже делает сравнения, чтобы убедиться, что в каждом наборе есть одни и те же элементы. ArrayList.equals делает то же самое, за исключением того, что он также проверяет порядок.

Также рассмотрите использование библиотеки Google Guava:

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

В чем разница между Collection и List в Java? Когда и что я должен использовать?

Прежде всего: List является Collection . Однако это специализированный Collection .

A List добавляет к нему информацию о определенной последовательности вещей: вы можете получить элемент в позиции n, вы можете добавить элемент в позицию n, вы можете удалить элемент в позиции n.

Существуют и другие специализированные коллекции, например Set , который добавляет функцию, в которой он никогда не будет содержать один и тот же элемент дважды.

Следующая диаграмма демонстрирует взаимосвязь между различными типами коллекции java:

Java API лучше всего ответить на этот

Collection

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

Список (расширяет коллекцию)

Упорядоченная коллекция (также известная как последовательность). Пользователь этого интерфейса имеет точный контроль над тем, где в список каждого элемента вставлен. пользователь может получить доступ к элементам целочисленный индекс (позиция в списке), и поиск элементов в списке.

В отличие от наборов, списки обычно позволяют повторяющиеся элементы. Более формально, списки обычно допускают пары элементы e1 и e2 такие, что e1.equals(e2), и они обычно разрешить несколько нулевых элементов, если они разрешить нулевые элементы вообще. Это не Непостижимо, что кто-то может пожелать для реализации списка, который запрещает дублирования, путем запуска времени выполнения исключения, когда пользователь пытается вставьте их, но мы ожидаем, что это использование быть редкими.

И решить, где использовать эти два интерфейса, гораздо менее важно, чем решить, какова конкретная реализация, которую вы используете. Это будет иметь последствия для времени и пространства вашей программы. Например, если вам нужен список, вы можете использовать ArrayList или LinkedList, каждый из которых будет иметь последствия для приложения. Для других типов коллекций (например, Sets) применяются аналогичные соображения.

Коллекция является основным интерфейсом иерархии коллекций Java, а List (Sequence) является одним из вспомогательных интерфейсов, который определяет упорядоченную коллекцию.

В списке данные находятся в определенном порядке.

В Set он не может содержать одни и те же данные дважды.

В коллекции он просто хранит данные без определенного порядка и может содержать повторяющиеся данные.

Читайте также: