Szukaj…


Deklarowanie zestawu HashSet z wartościami

Możesz utworzyć nową klasę, która dziedziczy z HashSet:

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

Rozwiązanie jednoliniowe:

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

Za pomocą guawy:

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

Korzystanie ze strumieni:

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

Rodzaje i zastosowanie zestawów

Zasadniczo zestawy są rodzajem kolekcji przechowującej unikalne wartości. Unikalność jest określana przez metody equals() i hashCode() .

Sortowanie zależy od rodzaju zestawu.

HashSet - losowe sortowanie

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 - Zamówienie reklamowe

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 - By TreeSet compareTo() lub 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"]

Inicjalizacja

Zestaw to kolekcja, która nie może zawierać zduplikowanych elementów. Modeluje abstrakcję zestawu matematycznego.

Set ma implementację w różnych klasach, takich jak HashSet , TreeSet , LinkedHashSet .

Na przykład:

HashSet:

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

Tutaj T może być String , Integer lub dowolnym innym obiektem . HashSet pozwala na szybkie wyszukiwanie O (1), ale nie sortuje dodanych do niego danych i traci kolejność wstawiania elementów.

TreeSet:

Przechowuje dane w uporządkowany sposób, poświęcając pewną szybkość podstawowym operacjom, które wymagają O (lg (n)). Nie utrzymuje kolejności wstawiania elementów.

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

LinkedHashSet:

Jest to implementacja HashSet z połączoną listą. Raz można iterować elementy w kolejności, w jakiej zostały dodane. Sortowanie nie obejmuje zawartości. HashSet są podstawowe operacje O (1), jednak utrzymanie listy połączonych kopii zapasowych wiąże się z wyższymi kosztami niż HashSet .

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

Podstawy zestawu

Co to jest zestaw?

Zestaw jest strukturą danych, która zawiera zestaw elementów z ważną właściwością, że żadne dwa elementy w zestawie nie są sobie równe.

Rodzaje zestawów:

  1. HashSet: zestaw wspierany przez tablicę skrótów (właściwie instancja HashMap)
  2. Połączony zestaw skrótów: zestaw wspierany przez tabelę skrótów i połączoną listę, z przewidywalną kolejnością iteracji
  3. TreeSet: Implementacja NavigableSet oparta na TreeMap.

Tworzenie zestawu

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

Dodawanie elementów do zestawu

Elementy można dodawać do zestawu za pomocą metody add()

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

Nasz zestaw po wykonaniu tej metody:

set = [12,13]

Usuń wszystkie elementy zestawu

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

Po tym zestawie będzie:

set = []

Sprawdź, czy element jest częścią zestawu

Istnienie elementu w zestawie można sprawdzić za pomocą metody contains()

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

Wyjście: False

Sprawdź, czy zestaw jest pusty

isEmpty() metody isEmpty() można sprawdzić, czy zestaw jest pusty.

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

Dane wyjściowe: prawda

Usuń element z zestawu

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

Sprawdź rozmiar zestawu

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

Wyjście: 0

Utwórz listę z istniejącego zestawu

Korzystanie z nowej listy

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

Korzystanie z metody List.addAll ()

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

Korzystanie z Java 8 Steam API

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

Eliminowanie duplikatów za pomocą Set

Załóżmy, że masz elements kolekcji i chcesz utworzyć kolejną kolekcję zawierającą te same elementy, ale bez wszystkich duplikatów :

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

Przykład :

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);

Wyjście :

noDuplicates = [Marco, Emily, John, Jenny]


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow