Как сделать пересечение множеств java

Обновлено: 07.07.2024

Я хочу иметь объединения, пересекающиеся, разностные и обратные операции в Java.

Сначала у меня есть 2 экземпляра ArrayList

объединение b должно возвращать c = [0,2,3,4,5,6,7,8,9,10]

пересечение b должно возвращать c = [5,8,10]

defference b должен возвращать c = [0,2,3,4]

reverse a = [10,8,6,5,4,2,0]

Что-то вроде этого.

Как реализовать этот метод в Java?

Обновить. Я должен начать с этого шаблона:

Во-первых, операции, которые вы описываете (кроме реверса), - это операции с настройками, а не операции с списками, поэтому используйте TreeSet для HashSet или (если вам нужен заказ).

Если вы используете Sets (как и следовало ожидать, для всех из них, кроме reverse, являются операции Set), Guava предоставляет эти операции в нем Sets класс.

Все это возвращает немодифицируемые представления, поддерживаемые исходными наборами.

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

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

Тем не менее, вы хорошо знаете код, который вы указали. Возьмем проблему по одному шагу за раз.

В документах найдите запись ArrayList.

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

insert(): вам нужно иметь упорядоченный список, или порядок не имеет значения? Или вы гарантированы, что значения будут предоставлены вам по порядку? Вы уже изучили алгоритмы сортировки?

remove(): эта функция не работает. посмотрите API ArrayList и посмотрите, как удалить элемент из списка. Используйте этот метод.

member(): ваш метод-член не работает. Вам нужно проверить каждую запись в списке и определить, соответствует ли текущий член аргументу функции. Вы узнали о циклах?

intersect(): ok, скажите мне на английском языке, что пересечение должно делать. Не используйте описание учителя, если вы можете помочь ему - используйте свои собственные слова (обратите внимание на других, это упражнение для OP, чтобы научиться программировать, поэтому, пожалуйста, не отвечайте на него за него)

difference(): еще раз скажите мне, что он должен делать.

reverse(): снова дайте мне английское описание того, что это должно делать.

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

Anonim

Я должен позволить пользователю ввести пару наборов A и B, а затем вычислить и распечатать пересечение и объединение. (Вселенная )

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

Это мой результат:

Сколько элементов в наборе А? 3 Введите число 1-10: введите число 1-10: введите число 1-10: сколько элементов в наборе B? 2 Введите число 1-10: введите число 1-10: объединение A и B: [1, 2, 3] Пересечение A и B: [1, 2]

Каков самый простой способ сделать объединение или пересечение Set s в Java? Я видел некоторые странные решения этой простой проблемы (например, ручное повторение двух наборов).

3 ответа

Я хочу, чтобы python получил пересечение списка множеств. Например, у меня есть функция, которая возвращает s список следующих наборов: [set(0,1,3), set(1,3)] Как видите, пересечением этого множества является множество . Как я могу получить python, чтобы получить пересечение? То, что я делал.

Нам дано n множеств целых чисел разных размеров. Каждый набор также может содержать дубликаты. Я должен найти пересечение множеств. Если элемент присутствует несколько раз во всех наборах, он должен быть добавлен к результату. Например, рассмотрим три набора .

Самое простое однострочное решение заключается в следующем:

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

В то время как гуава наверняка более аккуратна и в значительной степени стандартна, вот неразрушающий способ сделать объединение и пересечение , используя только стандартный Java

Вы можете достичь этого, используя Google's Guava library . Ниже приводится следующее объяснение с помощью примера:

Теперь вычисляем пересечение двух множеств в Java:

Выход: Intersection of two Set [z, y, x] and [q, p, x] in Java is [x]

Аналогично, Вычисление объединения двух множеств в Java:

Выход: Union of two Set [z, y, x] and [q, p, x] in Java is [q, p, x, z, y]

Похожие вопросы:

Как вы можете найти пересечение нескольких (более двух) множеств в Java? retainAll сам по себе не будет работать, так как мне нужна способность получить пересечение между более чем двумя наборами

Легко ли получить пересечение двух множеств? У меня есть: Set set1 = Set set2 = А я смотрю или метод как: Set intersection = new.

Как сделать пересечение и объединение для множеств типа tr1::unordered_set в c++? Я не могу найти много ссылок на это. Любая ссылка и код будут высоко оценены. Большое спасибо. Обновление: я просто.

Я хочу, чтобы python получил пересечение списка множеств. Например, у меня есть функция, которая возвращает s список следующих наборов: [set(0,1,3), set(1,3)] Как видите, пересечением этого.

Нам дано n множеств целых чисел разных размеров. Каждый набор также может содержать дубликаты. Я должен найти пересечение множеств. Если элемент присутствует несколько раз во всех наборах, он должен.

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

Я должен найти мощность объединения множеств и пересечение множеств двух множеств из файла данных. Я создал два массива (setA[] и setB[]) для хранения моих данных. a и b - это количество элементов в.

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

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

Контейнерами или коллекциями называют классы, которые позволяют хранить и обрабатывать много объектов сразу. Вы уже знаете две разновидности контейнеров — массивы и списки.

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

Тип коллекции Класс Описание
Список
Связный список
Вектор
Стэк (стопка)
Множество
Очередь
Карта/Словарь

Тут есть некоторая неоднозначность с именами. Хотя в большинстве языков программирования все эти структуры данных принято называть коллекциями, в Java это не так. В языке Java некоторые из этих классов реализуют интерфейс Collection , в то время как другие — нет.

Поэтому коллекции разделились на коллекции в широком смысле и коллекции в узком смысле (только те, которые реализуют интерфейс Collection ).

Поэтому, чтобы не путаться, коллекциями называют только коллекции в узком смысле (классы должны реализовывать интерфейс Collection ). Это все коллекции типа List , Set и Queue . Коллекции же в широком смысле принято называть контейнерами. К ним относятся классы типа Map и массивы.

2. Коллекция HashSet

Создать объект типа HashSet можно с помощью команды вида:

Где тип — это тип элементов, которые можно хранить в коллекции HashSet .

У класса HashSet есть такие методы:

Метод Описание
Добавляет элемент value в коллекцию
Удаляет элемент value из коллекции.
Возвращает true , если там такой элемент был
Проверяет, есть ли в коллекции элемент value
Очищает коллекцию: удаляет все элементы
Возвращает количество элементов в коллекции

Пример использования множества.


Заносим в set приветствия на разных языках.


Вводим с консоли слово,

В классе Solution есть метод arrayToHashSet(String[]), который должен из переданного массива вернуть HashSet с теми же элементами. Метод main не участвует в проверке.

3. Множество

Коллекция Set создана для хранения множества элементов. Поэтому ее так и называют Set (множество). У этой коллекции есть три особенности.

Операции над множеством

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

Отсутствие порядка

У элементов этой коллекции нет номеров. Нельзя получить элемент по его индексу или записать значение в коллекцию по определенному индексу. Методов get() и set() у множества нет.

Уникальность элементов

Поиск элементов

Когда вы добавляете во множество новый элемент, удаляете элемент, или проверяете наличие элемента, внутри метода выполняется поиск элемента. Элементы коллекции и переданный элемент сравниваются сначала по hashCode() , а если hashCode() совпадают, по equals .

В классе Solution есть метод checkWords(String), который должен проверять наличие переданного слова в множестве words. Если слово есть, то выводим в консоль: Слово [переданное слово] есть в множестве Если нет: Слова [переданное слово] нет в множестве Метод main не участвует в проверке. Пример

4. Сравнение коллекций: List vs Set

Давайте сравним коллекции двух типов: List и Set . В чем же их основные отличия и когда выгоднее использовать одну, а когда – вторую.

Давайте попробуем сравнить Список и Множество на примере детских игрушек.

Коллекция List (Список) похожа на набор игрушек в детской комнате, стоящих возле стены. Можно добавить игрушку в конец списка. Можно вставить и в середину, если очень нужно (но часть игрушек придется передвинуть).

У каждой игрушки есть порядковый номер. Можно взять игрушку по ее номеру или заменить игрушку номер 7 на игрушку номер 13. Можно удалить из списка игрушку номер 4. Ну и наконец, можно узнать количество всех игрушек в списке.

Коллекция Set (Множество) больше похожа на игрушки, сброшенные в кучу. В кучу можно добавить игрушку, можно удалить игрушку из кучи. Но фиксированного номера у таких игрушек нет.

Или допустим, вы выбираете ребенку игрушку на день рождения. Тогда вы в первую очередь думаете, есть у него такая игрушка или нет. Тогда все игрушки, которые у него есть, образуют множество игрушек, которые вы решили не покупать.

Вот для таких случаев вам и понадобится множество Set и его самый популярный представитель — класс HashSet .

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