Как сделать пересечение множеств java
Я хочу иметь объединения, пересекающиеся, разностные и обратные операции в 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, с ручкой и бумагой.
Я должен позволить пользователю ввести пару наборов 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 .
Читайте также: