Set java найти элемент

Интерфейс Java Set

Интерфейс Java Set, java.util.Set, представляет коллекцию объектов, где каждый объект уникален. Другими словами, один и тот же объект не может встречаться более одного раза в наборе. Интерфейс является стандартным и подтипом интерфейса Collection, что означает, что Set наследуется от Collection.

Вы можете добавить любой объект в набор. Если набор не типизирован с использованием Java Generics, то вы можете даже смешивать объекты разных типов (классов) в одном наборе. Однако в действительности смешивание объектов разных типов в одном наборе не часто выполняется.

Сравнение со списком

Интерфейсы Set и Java List очень похожи друг на друга и представляет собой набор элементов. Тем не менее, есть некоторые существенные различия. Эти различия отражены в методах, которые содержат интерфейсы Set и List.

  1. Первое различие состоит в том, что один и тот же элемент не может встречаться в наборе более одного раза. Это отличается от списка, где каждый элемент может встречаться более одного раза.
  2. Второе отличие состоит в том, что элементы в Set не имеют гарантированного внутреннего порядка. Элементы в списке имеют внутренний порядок, и элементы могут быть повторены в этом порядке.
Читайте также:  Javascript умножить на процент

Пример набора

Вот первый простой пример:

Set setA = new HashSet(); String element = "element 1"; setA.add(element); System.out.println( setA.contains(element) );

В этом примере создается HashSet, который является одним из классов в API Java, которые реализуют интерфейс Set. Затем он добавляет строковый объект в набор и, наконец, проверяет, содержит ли набор только что добавленный элемент.

Установление реализации

Будучи подтипом Collection, все методы в интерфейсе Collection также доступны в интерфейсе Set.

Поскольку Set – это интерфейс, вам нужно создать конкретную реализацию, чтобы использовать его. Вы можете выбрать:

  • java.util.EnumSet;
  • java.util.HashSet;
  • Jawakutilklaidaked ashset;
  • java.util.TreeSet.

Каждая из этих реализаций Set ведет себя немного по-разному в отношении порядка элементов при итерации набора и времени (большая запись O), необходимого для вставки и доступа к элементам в наборах.

HashSet поддерживается HashMap. Он не дает никаких гарантий относительно последовательности элементов при их итерации.

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

TreeSet также гарантирует порядок элементов при повторении, но он является порядком сортировки элементов. Другими словами, порядок, в котором элементы должны быть отсортированы, если вы использовали Collections.sort() для List или массива, содержащего эти элементы. Этот порядок определяется либо их естественным порядком(если они реализуют Comparable), либо конкретной реализацией Comparator.

Вот несколько примеров того, как создать экземпляр Set:

Set setA = new EnumSet(); Set setB = new HashSet(); Set setC = new LinkedHashSet(); Set setD = new TreeSet();

Добавить элемент в набор

Чтобы добавить элементы в Set, вы вызываете его метод add(). Этот метод унаследован от интерфейса Collection. Вот несколько примеров:

Set setA = new HashSet(); setA.add("element 1"); setA.add("element 2"); setA.add("element 3");

Три вызова add() добавляют экземпляр String к набору.

Перебор элементов набора

Есть два способа перебора элементов набора Java:

Обе эти опции описаны в следующих разделах.

При выполнении итерации элементов в Set порядок элементов зависит от того, какую реализацию вы используете.

Итерация множества с помощью итератора

Чтобы выполнить итерацию элементов набора с помощью итератора, сначала необходимо получить его из набора. Вы получаете Iterator из Set, вызывая метод iterator():

Iterator iterator = set.iterator(); while(iterator.hasNext()

Итерация множества с использованием цикла For-Each

Второй способ перебора элементов набора – использование цикла for-each. Вот как выглядит итерация элементов Set с использованием цикла for-each:

Интерфейс Set реализует интерфейс Java Iterable. Вот почему вы можете перебирать элементы набора, используя цикл for-each.

С использованием API Java Stream

Чтобы выполнить итерацию с помощью API-интерфейса Java Stream, необходимо создать поток из набора:

Set set = new HashSet(); set.add("one"); set.add("two"); set.add("three"); Stream stream = set.stream(); stream.forEach((element) -> < System.out.println(element); >);

Как удалить элементы

Используется метод remove(Object o):

Невозможно удалить объект на основе индекса в наборе, поскольку порядок элементов зависит от его реализации.

Как удалить все элементы

Как добавить все элементы из другой коллекции

Интерфейс List имеет метод addAll(), который добавляет все элементы из другой Collection (List или Set) в Set. В теории множеств это соответствует объединению множества и другой коллекции . Вот пример:

Set set = new HashSet(); set.add("one"); set.add("two"); set.add("three"); Set set2 = new HashSet(); set2.add("four"); set2.addAll(set);

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

Как удалить все элементы из другой коллекции

Интерфейс Java Set имеет метод с именем removeAll(), который удаляет все элементы в наборе, также присутствующие в другой коллекции. В теории множеств это называется разницей между множеством и другой коллекцией . Вот пример:

Set set = new HashSet(); set.add("one"); set.add("two"); set.add("three"); Set set2 = new HashSet(); set2.add("three"); set.removeAll(set2);

После запуска набор будет содержать элементы String один и два. Третий элемент был удален, потому что он присутствовал в set2, который был задан как параметр для set.removeAll(set2).

Как сохранить все элементы, присутствующие в другой коллекции

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

Set set = new HashSet(); set.add("one"); set.add("two"); set.add("three"); Set set2 = new HashSet(); set2.add("three"); set2.add("four"); set.retainAll(set2);

После запуска набор будет содержать только элемент String три, так как присутствует как в set, так и в set2.

Как установить размер

Используется метод size(). Размер набора – это количество элементов, содержащихся в наборе. Вот пример чтения размера:

Set set = new HashSet(); set.add("123"); set.add("456"); set.add("789"); int size = set.size();

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

Как проверить, пуст ли Set

Используется метод isEmpty() для Set:

Set set = new HashSet(); boolean isEmpty = set.isEmpty();

После запуска этого кода переменная isEmpty будет содержать значение true, потому что Set пуст (в нем нет элементов).

Вы также можете проверить, является ли Set пустым, сравнив значение, возвращаемое методом size() с 0:

Set set = new HashSet(); boolean isEmpty =(set.size() == 0);

После выполнения этого кода переменная isEmpty будет содержать значение true, потому что метод Set size() возвращает 0 – в примере не содержится элементов.

Как проверить, содержится ли элемент

Вы можете проверить, содержит ли Set данный элемент (объект), вызвав метод contains():

Set set = new HashSet(); set.add("123"); set.add("456"); boolean contains123 = set.contains("123");

После выполнения этого кода переменная contains123 будет содержать значение true, потому что Set на самом деле содержит строку 123.

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

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

set.add(null); containsElement = set.contains(null); System.out.println(containsElement);

Очевидно, что если входной параметр для contains() имеет значение null, метод contains() не будет использовать метод equals() для сравнения с каждым элементом, а вместо этого использует оператор ==.

Универсальные

По умолчанию вы можете поместить любой объект в набор, но с Java 5 Java Generics позволяет ограничить типы объектов, которые вы можете вставить:

Этот набор теперь может содержать только экземпляры MyObject. Затем вы можете получить доступ к элементам и выполнить итерацию без их приведения:

for(MyObject anObject : set) < //do someting to anObject. >

Как конвертировать в список

Вы можете преобразовать Set в List, создав List и вызвав его метод addAll(), передав Set в качестве параметра:

Set set = new HashSet(); set.add("123"); set.add("456"); List list = new ArrayList(); list.addAll(set);

После запуска этого примера список будет содержать строковые элементы 123 и 456 – так как это были все элементы, присутствующие в наборе при вызове List addAll(set).

Источник

Как получить элемент из set в java

Для получения элемента из Set в Java можно использовать метод Iterator.next() , который возвращает следующий элемент из набора.

SetString> nums = new HashSet<>(); nums.add("one"); nums.add("two"); nums.add("three"); IteratorString> iterator = nums.iterator(); String element = iterator.next(); System.out.println(element); // => one 

Также можно использовать цикл for-each для перебора всех элементов в Set и получения каждого из них:

for (String element : nums)  System.out.println(element); // выводит все элементы в произвольном порядке > 

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

Источник

How to Search for an element in HashSet in Java

In this article we will discuss how to search for an element in HashSet.

Main feature of a HashSet is Fast searching. Which it achieves using Hashing. Now suppose we want to search if an element exists in HashSet ?

It can be done using contains() member function of HashSet i.e.

// It checks if the given element exists in a HashSet or not. public boolean contains(Object o)

It will first calculate the Hash Code of given object. Then based on that hash code, it will go to a bucket and check all elements inside the bucket using thier equals() member function.

Frequently Asked:

Now Lets see an example to check if a given element exists in a HashSet i.e.

package com.thispointer.java.collections.hashsets; import java.util.HashSet; import java.util.Iterator; public class Example2 < public static void main(String[] args) < // Create a HashSet of String Objects HashSetsetOfStrs = new HashSet<>(); setOfStrs.add("hello"); setOfStrs.add("abc"); setOfStrs.add("time"); setOfStrs.add("Hi"); setOfStrs.add("abc"); // Search for an element from Hash Set if(setOfStrs.contains("time")) < System.out.println("Yes Set contains the 'time' String"); >if(setOfStrs.contains("table") == false) < System.out.println("No Set do not contains the 'table' String"); >> >
Yes Set contains the 'time' String No Set do not contains the 'table' String

Share your love

Leave a Comment Cancel Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Terms of Use

Disclaimer

Copyright © 2023 thisPointer

To provide the best experiences, we and our partners use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us and our partners to process personal data such as browsing behavior or unique IDs on this site and show (non-) personalized ads. Not consenting or withdrawing consent, may adversely affect certain features and functions.

Click below to consent to the above or make granular choices. Your choices will be applied to this site only. You can change your settings at any time, including withdrawing your consent, by using the toggles on the Cookie Policy, or by clicking on the manage consent button at the bottom of the screen.

The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.

The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.

The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.

The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.

Источник

Оцените статью