1. Pojemniki i kolekcje

Kontenery lub kolekcje to klasy, które umożliwiają przechowywanie i przetwarzanie wielu obiektów jednocześnie. Znasz już dwa rodzaje kontenerów - tablice i listy.

Java ma kilkadziesiąt kolekcji, z których każda przechowuje elementy na swój specyficzny sposób. Tutaj jest kilka z nich:

Typ kolekcji Klasa Opis
List
ArrayList
Lista
LinkedList
Połączona lista
Vector
Wektor
Stack
Stos (stos)
Set
HashSet
Pęczek
TreeSet
LinkedHashSet
Queue
PriorityQueue
Kolejka
ArrayDeque
Map
HashMap
Mapa/Słownik
TreeMap
HashTable

Jest tu pewna niejasność co do nazw. Podczas gdy większość języków programowania odnosi się do wszystkich tych struktur danych jako kolekcji, w Javie tak nie jest. W języku Java niektóre z tych klas implementują interfejs, Collectiona inne nie.

W związku z tym kolekcje zostały podzielone na kolekcje w szerokim znaczeniu i kolekcje w wąskim znaczeniu (tylko te, które implementują interfejs Collection).

Dlatego, aby się nie mylić, tylko kolekcje w wąskim znaczeniu nazywane są kolekcjami (klasy muszą implementować interfejs Collection). Są to wszystkie kolekcje typów Listi Set. QueueZbiory w najszerszym znaczeniu są powszechnie określane jako kontenery . Należą do nich klasy typów Mapi tablice.


2. KolekcjaHashSet

Klasa HashSetjest typowym przedstawicielem kolekcji typu "set". Pod wieloma względami jest podobna do klasy ArrayList, a pod pewnymi względami jest jej bardziej prymitywną wersją.

Możesz utworzyć obiekt typu HashSetza pomocą polecenia view:

HashSet<Тип> Nazwa = new HashSet<Тип>();

Gdzie type jest typem elementów, które mogą być przechowywane w kolekcji HashSet.

Klasa HashSetposiada następujące metody:

metoda Opis
boolean add(Тип value)
Dodaje element valuedo kolekcji
boolean remove(Тип value)
Usuwa element valuez kolekcji.
Zwraca, truejeśli taki element istniał
boolean contains(Тип value)
Sprawdza, czy kolekcja zawiera elementvalue
void clear()
Czyści kolekcję: usuwa wszystkie elementy
int size()
Zwraca liczbę elementów w kolekcji

Przykład użycia zestawu.

Napiszmy program, który żegna się z użytkownikiem, jeśli ten się z nią przywita: jeśli użytkownik się przywita. Dla większego zainteresowania „cześć” można wypowiedzieć w kilku językach.

Kod Notatka
HashSet<String> set = new HashSet<String>();

set.add("Cześć");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Cialo");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Да спаткання!");
Tworzymy obiekt typu HashSet, który przechowuje elementy typu String.


Dodajemy setpozdrowienia w różnych językach.




Wpisujemy słowo z konsoli,


jeśli to słowo jest w naszym zestawie powitań, to żegnamy się (po białorusku).


3. Wiele

Kolekcja Setjest przeznaczona do przechowywania wielu przedmiotów. Dlatego nazywa się to tak Set(zestaw). Ta kolekcja ma trzy cechy.

Operacje na zbiorze

Ze zbiorem można wykonać tylko trzy operacje: dodać elementy do zestawu, usunąć elementy ze zbioru i sprawdzić, czy zestaw zawiera określony element. Wszystko.

Brak porządku

Elementy tej kolekcji nie mają numerów. Nie można uzyskać elementu w jego indeksie ani zapisać wartości do kolekcji w określonym indeksie. get()W set()zestawie nie ma metod .

Wyjątkowość elementów

Wszystkie elementy zestawu są niepowtarzalne. W przeciwieństwie do listy, zestaw może zawierać tylko jeden element tylko raz. Obiekt albo jest w zbiorze, albo nie: nie ma trzeciego. Niemożliwe jest trzykrotne dodanie „koloru czarnego” do „zestawu kolorów”. Jest albo go nie ma.

Szukaj elementów

Kiedy dodajesz nowy element do zestawu, usuwasz element lub sprawdzasz istnienie elementu, element jest przeszukiwany wewnątrz metody. Elementy kolekcji i przekazany element są najpierw porównywane przez hashCode(), a jeśli hashCode()pasują, przez equals.



4. Porównanie kolekcji: ListvsSet

Porównajmy kolekcje dwóch typów: Listi Set. Jakie są ich główne różnice i kiedy bardziej opłaca się korzystać z jednego, a kiedy z drugiego.

Spróbujmy porównać Listę i Zestaw na przykładzie zabawek dla dzieci.

Kolekcja List(Lista) jest jak zestaw zabawek w pokoju dziecka, ustawiony pod ścianą. Możesz dodać zabawkę na koniec listy. Możesz również włożyć go na środek, jeśli naprawdę tego potrzebujesz (ale niektóre zabawki będą musiały zostać przeniesione).

Każda zabawka posiada numer seryjny. Możesz wziąć zabawkę po jej numerze lub zamienić zabawkę numer 7 na zabawkę numer 13. Możesz usunąć zabawkę numer 4. Na koniec możesz sprawdzić liczbę wszystkich zabawek na liście.

Kolekcja Set(wiele) jest bardziej jak zabawki wrzucone na stos. Możesz dodać zabawkę do sterty, możesz usunąć zabawkę ze sterty. Ale takie zabawki nie mają ustalonej liczby.

Lub powiedzmy, że wybierasz zabawkę na urodziny swojego dziecka. Wtedy przede wszystkim myślisz, czy ma taką zabawkę, czy nie. Następnie wszystkie zabawki, które ma, tworzą zestaw zabawek, których postanawiasz nie kupować.

Z tego punktu widzenia kolejność zabawek w zestawie „już mam” nie ma znaczenia, podobnie jak fakt, że jubilat ma dwie identyczne zabawki. Nie interesują Cię same zabawki i ich ilość, ale zabawki jako zestaw unikalnych przedmiotów.

Do takich przypadków potrzebny będzie zestaw Seti jego najpopularniejszy przedstawiciel, klasa HashSet.