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 |
---|---|---|
|
|
Lista |
|
Połączona lista | |
|
Wektor | |
|
Stos (stos) | |
|
|
Pęczek |
|
||
|
||
|
|
Kolejka |
|
||
|
|
Mapa/Słownik |
|
||
|
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, Collection
a 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 List
i Set
. Queue
Zbiory w najszerszym znaczeniu są powszechnie określane jako kontenery . Należą do nich klasy typów Map
i tablice.
2. KolekcjaHashSet
Klasa HashSet
jest 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 HashSet
za pomocą polecenia view:
HashSet<Тип> Nazwa = new HashSet<Тип>();
Gdzie type jest typem elementów, które mogą być przechowywane w kolekcji HashSet
.
Klasa HashSet
posiada następujące metody:
metoda | Opis |
---|---|
|
Dodaje element value do kolekcji |
|
Usuwa element value z kolekcji. Zwraca, true jeśli taki element istniał |
|
Sprawdza, czy kolekcja zawiera elementvalue |
|
Czyści kolekcję: usuwa wszystkie elementy |
|
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 |
---|---|
|
Tworzymy obiekt typu HashSet , który przechowuje elementy typu String . Dodajemy set pozdrowienia 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 Set
jest 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: List
vsSet
Porównajmy kolekcje dwóch typów: List
i 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 Set
i jego najpopularniejszy przedstawiciel, klasa HashSet
.
GO TO FULL VERSION