Java Language
Zestawy
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
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
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
Set<String> set = new TreeSet<> ();
set.add("Banana");
set.add("Banana");
set.add("Apple");
set.add("Strawberry");
// Set Elements: ["Apple", "Banana", "Strawberry"]
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:
- HashSet: zestaw wspierany przez tablicę skrótów (właściwie instancja HashMap)
- Połączony zestaw skrótów: zestaw wspierany przez tabelę skrótów i połączoną listę, z przewidywalną kolejnością iteracji
- 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]