Wstęp

W prawie wszystkich programach istnieje potrzeba przechowywania zestawu dowolnych danych. Mogą to być ciągi i liczby, obiekty i tak dalej. Do tego celu idealnie nadają się tablice. Ale tablice mają pewne ograniczenia. Na przykład stały rozmiar, brak możliwości usunięcia elementów, wstawienia elementów w środku. Kolekcje zostały stworzone, aby obejść to i inne ograniczenia. Wszystkie typy kolekcji (a jest ich wiele, jak zobaczymy w dalszej części tego rozdziału) mają możliwość dynamicznej zmiany rozmiaru. Niektóre typy kolekcji mogą przechowywać uporządkowane elementy i automatycznie porządkować nowe elementy w miarę ich dodawania.

Podczas tego wykładu przyjrzymy się podstawowej hierarchii klas kolekcji Java Collections Framework . Istnieją również różne biblioteki alternatywne, które rozszerzają możliwości standardowej platformy Java Collections Framework . Najpopularniejszym z nich jest Guava (Google Collections Library).

* Nie wszystkie interfejsy i klasy są przedstawione na diagramie. Niektóre pominięto dla ułatwienia zrozumienia

Główne interfejsy

Diagram pokazuje, że istnieją dwa główne interfejsy, z których implementowane są pozostałe klasy i interfejsy kolekcji.

Przyjrzyjmy się tym interfejsom:

  1. Kolekcja to zwykła kolekcja zawierająca zestaw pojedynczych elementów (obiektów). Ta kolekcja ma główne metody pracy z elementami: wstawianie ( add , addAll ), usuwanie ( remove , removeAll , clear ), wyszukiwanie ( zawiera , zawieraAll ), sprawdzanie, czy kolekcja jest pusta ( isEmpty ) i rozmiar ( size ).

  2. Mapa to kolekcja, której struktura to pary klucz-wartość. Co więcej, w ramach jednej Mapy każdy klucz jest unikalny: nie ma dwóch kluczy o identycznej wartości. Ponadto ta kolekcja jest czasami nazywana słownikiem . Mapa to osobny interfejs. Nie implementuje interfejsu Collection , ale jest częścią Java Collections Framework .

Podstawowe metody pracy z elementami mapy :

  • wstaw ( umieść , umieść wszystko )

  • pobieranie ( pobieranie , zestaw kluczy , wartości , zestaw wpisów )

  • usuwanie ( usuwać , usuwać )

  • szukaj ( zawieraKlucz , zawieraWartość )

  • sprawdzanie, czy kolekcja jest pusta ( isEmpty )

  • rozmiar _ _

Teraz porozmawiajmy więcej o każdym z nich.

Interfejs kolekcji

Interfejs Collection rozszerza interfejs Iterable , a ten interfejs ma pojedynczą metodę iterator() . Dla nas oznacza to, że każda kolekcja, która dziedziczy po Iterable , będzie mogła zwrócić iterator.

Iterator to specjalny obiekt, za pomocą którego można uzyskać dostęp do elementów dowolnej kolekcji, niezależnie od specyfiki jej implementacji.

Na rysunku widać, że 3 interfejsy są dziedziczone z interfejsu Collection : List , Queue i Set . Przyjrzyjmy się teraz pokrótce każdemu z nich.

Lista to uporządkowana kolekcja, która pozwala na duplikaty między wartościami. Możesz także znaleźć inne nazwy - sekwencja (sekwencja), lista. Cechą listy jest to, że elementy są ponumerowane i można uzyskać do nich dostęp za pomocą numeru (indeksu).

Kolejka - przetłumaczona z angielskiego jakokolejka. Poprawna wymowa: Kolejka - KYU. Kolejkaprzechowuje elementy w kolejności, w jakiej zostały dodane do kolejki .

Zestaw - w przeciwieństwie do listy, opisuje zbiór nieuporządkowany, w którym nie ma powtórzeń elementów. Zbiórodpowiada pojęciu w matematyce - m zbiór ( zbiór ).

Implementacje interfejsu Map

W interfejsie mapy możemy zobaczyć stosunek unikalnych kluczy do wartości.


interface Map<K, V>

gdzie K to typ kluczy, a V to typ przechowywanych wartości.

Według klucza możemy wyodrębnić dane z Map . Aby dodać element do mapy, musisz określić klucz i wartość.

Rozważ niektóre implementacje Map :

  1. HashMap to implementacja mapy oparta na tablicach skrótów. Może przechowywać klucze i wartości dowolnego typu, w tym null . Kolejność elementów nie jest gwarantowana.

  2. LinkedHashMap to struktura danych, która przechowuje dane jako połączoną listę elementów. Elementy są wymienione w kolejności, w jakiej zostały dodane.

  3. TreeMap — Implementuje interfejs SortedMap (przez NavigableMap ). Elementy w takiej strukturze są przechowywane w postaci posortowanej (po dodaniu nowego elementu kolekcja jest sortowana automatycznie). TreeMap doskonale nadaje się do przechowywania dużych ilości posortowanych informacji w celu szybkiego wyszukiwania.

Starsze kolekcje

Z poprzednich wersji Javy pozostały przestarzałe kolekcje (w celu zachowania kompatybilności wstecznej), których nie zaleca się używać:

  • Wyliczanie jest analogiczne do interfejsu Iteratora ;

  • Vector - uporządkowana lista elementów, analogiczna do klasy ArrayList ;

  • Stack – struktura realizująca przechowywanie elementów na zasadzie stosu (np. stos książek), istnieją metody pchania ( push ) i pchania ( pop ) elementów;

  • Dictionary jest podobny do interfejsu Map , ale jest klasą abstrakcyjną;

  • Hashtable jest analogiczne do HashMap .

Możesz przeczytać więcej na temat Collections Framework w tym artykule .