Поиск…


Объявление HashSet со значениями

Вы можете создать новый класс, который наследуется от HashSet:

Set<String> h = new HashSet<String>() {{
    add("a");
    add("b");
}};

Однострочное решение:

Set<String> h = new HashSet<String>(Arrays.asList("a", "b"));

Использование guava:

Sets.newHashSet("a", "b", "c")

Использование потоков:

Set<String> set3 = Stream.of("a", "b", "c").collect(toSet());

Типы и использование наборов

Как правило, наборы - это тип коллекции, в котором хранятся уникальные значения. Уникальность определяется методами equals() и hashCode() .

Сортировка определяется типом набора.

HashSet - случайная сортировка

Java SE 7
Set<String> set = new HashSet<> ();
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");

// Set Elements: ["Strawberry", "Banana", "Apple"]

LinkedHashSet - порядок вставки

Java SE 7
Set<String> set = new LinkedHashSet<> ();
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");

// Set Elements: ["Banana", "Apple", "Strawberry"]

TreeSet - с помощью compareTo() или Comparator

Java SE 7
Set<String> set = new TreeSet<> ();
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");

// Set Elements: ["Apple", "Banana", "Strawberry"]
Java SE 7
Set<String> set = new TreeSet<> ((string1, string2) -> string2.compareTo(string1));
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");

// Set Elements: ["Strawberry", "Banana", "Apple"]

инициализация

Набор - это сборник, который не может содержать повторяющиеся элементы. Он моделирует математическую абстрактную абстракцию.

Set есть его реализация в различных классах , как HashSet , TreeSet , LinkedHashSet .

Например:

HashSet:

Set<T> set = new HashSet<T>();

Здесь T может быть String , Integer или любым другим объектом . HashSet позволяет быстро найти O (1), но не сортирует данные, добавленные к нему, и теряет порядок вставки элементов.

TreeSet:

Он хранит данные отсортированным образом, жертвуя некоторой скоростью для основных операций, которые принимают O (lg (n)). Он не поддерживает порядок вставки элементов.

TreeSet<T> sortedSet = new TreeSet<T>();

LinkedHashSet:

Это реализация связанного списка HashSet После этого можно перебирать элементы в том порядке, в котором они были добавлены. Сортировка не предоставляется для ее содержимого. O (1) предоставляются основные операции, однако при сохранении связанного списка поддержки существует более высокая стоимость, чем HashSet .

LinkedHashSet<T> linkedhashset = new LinkedHashSet<T>();

Основы набора

Что такое набор?

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

Типы комплектов:

  1. HashSet: набор, поддерживаемый хэш-таблицей (на самом деле экземпляр HashMap)
  2. Связанный HashSet: набор, поддерживаемый таблицей Hash и связанным списком, с предсказуемым порядком итерации
  3. TreeSet: реализация NavigableSet на основе TreeMap.

Создание набора

Set<Integer> set = new HashSet<Integer>(); // Creates an empty Set of Integers

Set<Integer> linkedHashSet = new LinkedHashSet<Integer>(); //Creates a empty Set of Integers, with predictable iteration order

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

Элементы могут быть добавлены в набор, используя метод add()

 set.add(12); //  - Adds element 12 to the set
 set.add(13); //  - Adds element 13 to the set

Наш набор после выполнения этого метода:

set = [12,13]

Удалить все элементы набора

set.clear();  //Removes all objects from the collection.

После этого набора будет:

set = []

Проверьте, является ли элемент частью набора

Существование элемента в наборе можно проверить с помощью метода contains()

set.contains(0);  //Returns true if a specified object is an element within the set.

Выход: False

Проверьте, не установлен ли набор

Метод isEmpty() может использоваться для проверки того, пуст ли Set.

set.isEmpty();  //Returns true if the set has no elements

Выход: True

Удалите элемент из набора

 set.remove(0); // Removes first occurrence of a specified object from the collection

Проверьте размер набора

set.size(); //Returns the number of elements in the collection

Выход: 0

Создайте список из существующего набора

Использование нового списка

List<String> list = new ArrayList<String>(listOfElements);

Использование метода List.addAll ()

    Set<String> set = new HashSet<String>();
    set.add("foo");
    set.add("boo");
    
    List<String> list = new ArrayList<String>();
    list.addAll(set);

Использование Java 8 Steam API

List<String> list = set.stream().collect(Collectors.toList());

Устранение дубликатов с использованием Set

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

Collection<Type> noDuplicates = new HashSet<Type>(elements);

Пример :

List<String> names = new ArrayList<>(
        Arrays.asList("John", "Marco", "Jenny", "Emily", "Jenny", "Emily", "John"));
Set<String> noDuplicates = new HashSet<>(names);
System.out.println("noDuplicates = " + noDuplicates);

Выход :

noDuplicates = [Marco, Emily, John, Jenny]


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow