Java - Collection Framework

Przed wersją Java 2 Java udostępniała klasy ad hoc, takie jak Dictionary, Vector, Stack, i Propertiesdo przechowywania i manipulowania grupami obiektów. Chociaż te zajęcia były całkiem przydatne, brakowało im centralnego, jednoczącego tematu. Tak więc sposób, w jaki użyłeś Vector, był inny niż sposób, w jaki użyłeś Właściwości.

Ramy kolekcji zostały zaprojektowane w celu spełnienia kilku celów, takich jak:

  • Ramy musiały być wydajne. Implementacje podstawowych kolekcji (tablice dynamiczne, listy połączone, drzewa i tabele skrótów) miały być bardzo wydajne.

  • Ramy musiały umożliwiać różnym typom kolekcji działanie w podobny sposób i przy wysokim stopniu interoperacyjności.

  • Struktura musiała łatwo rozszerzać i / lub dostosowywać kolekcję.

W tym celu cała struktura kolekcji jest zaprojektowana wokół zestawu standardowych interfejsów. Kilka standardowych implementacji, takich jakLinkedList, HashSet, i TreeSet, z tych interfejsów można używać w takiej postaci, w jakiej są, a także zaimplementować własną kolekcję, jeśli zechcesz.

Struktura kolekcji to ujednolicona architektura do reprezentowania kolekcji i manipulowania nimi. Wszystkie ramy kolekcji zawierają następujące elementy -

  • Interfaces- Są to abstrakcyjne typy danych, które reprezentują kolekcje. Interfejsy umożliwiają manipulowanie zbiorami niezależnie od szczegółów ich reprezentacji. W językach zorientowanych obiektowo interfejsy generalnie tworzą hierarchię.

  • Implementations, i.e., Classes- To są konkretne implementacje interfejsów kolekcji. Zasadniczo są to struktury danych wielokrotnego użytku.

  • Algorithms- Są to metody, które wykonują przydatne obliczenia, takie jak wyszukiwanie i sortowanie, na obiektach, które implementują interfejsy kolekcji. Mówi się, że algorytmy są polimorficzne: to znaczy ta sama metoda może być używana w wielu różnych implementacjach odpowiedniego interfejsu kolekcji.

Oprócz kolekcji struktura definiuje kilka interfejsów map i klas. Mapy przechowują pary klucz / wartość. Chociaż mapy nie są zbiorami we właściwym użyciu tego terminu, ale są w pełni zintegrowane z kolekcjami.

Interfejsy kolekcji

Struktura kolekcji definiuje kilka interfejsów. Ta sekcja zawiera przegląd każdego interfejsu -

Sr.No. Interfejs i opis
1 Interfejs kolekcji

Umożliwia to pracę z grupami obiektów; znajduje się na szczycie hierarchii kolekcji.

2 Interfejs listy

To się rozciąga Collection a wystąpienie List przechowuje uporządkowaną kolekcję elementów.

3 Zbiór

To rozszerza Collection o obsługę zestawów, które muszą zawierać unikalne elementy.

4 SortedSet

To rozszerza Set do obsługi posortowanych zestawów.

5 Mapa

To odwzorowuje unikalne klucze na wartości.

6 Map.Entry

Opisuje element (parę klucz / wartość) na mapie. To jest wewnętrzna klasa Map.

7 SortedMap

To rozszerza Mapę, dzięki czemu klucze są utrzymywane w porządku rosnącym.

8 Wyliczenie

To jest starszy interfejs definiuje metody, za pomocą których można wyliczać (pobierać pojedynczo) elementy w kolekcji obiektów. Ten starszy interfejs został zastąpiony przez Iterator.

Klasy kolekcji

Java udostępnia zestaw standardowych klas kolekcji, które implementują interfejsy Collection. Niektóre z klas zapewniają pełne implementacje, które mogą być używane w takiej postaci, w jakiej są, a inne są klasami abstrakcyjnymi, dostarczającymi szkieletowych implementacji, które są używane jako punkty wyjścia do tworzenia konkretnych kolekcji.

Standardowe klasy kolekcji są podsumowane w poniższej tabeli -

Sr.No. Klasa i opis
1

AbstractCollection

Implementuje większość interfejsu Collection.

2

AbstractList

Rozszerza AbstractCollection i implementuje większość interfejsu List.

3

AbstractSequentialList

Rozszerza AbstractList do użycia przez kolekcję, która używa sekwencyjnego, a nie losowego dostępu do jej elementów.

4 Połączona lista

Implementuje połączoną listę, rozszerzając AbstractSequentialList.

5 ArrayList

Implementuje tablicę dynamiczną, rozszerzając AbstractList.

6

AbstractSet

Rozszerza AbstractCollection i implementuje większość interfejsu Set.

7 HashSet

Rozszerza AbstractSet do użytku z tabelą skrótów.

8 LinkedHashSet

Rozszerza HashSet, aby umożliwić iteracje zamówienia reklamowego.

9 TreeSet

Implementuje zestaw przechowywany w drzewie. Rozszerza AbstractSet.

10

AbstractMap

Implementuje większość interfejsu Map.

11 HashMap

Rozszerza AbstractMap, aby używać tabeli skrótów.

12 TreeMap

Rozszerza AbstractMap, aby używała drzewa.

13 WeakHashMap

Rozszerza AbstractMap, aby używała tablicy mieszania ze słabymi klawiszami.

14 LinkedHashMap

Rozszerza HashMap, aby umożliwić iteracje zamówienia reklamowego.

15 IdentityHashMap

Rozszerza AbstractMap i używa równości odwołań podczas porównywania dokumentów.

W AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList i AbstractMap zajęcia dostarczają szkielet implementacje interfejsów zbierania podstawowych, w celu zminimalizowania wysiłku potrzebnego do ich realizacji.

Następujące starsze klasy zdefiniowane przez java.util zostały omówione w poprzednim rozdziale -

Sr.No. Klasa i opis
1 Wektor

To implementuje tablicę dynamiczną. Jest podobny do ArrayList, ale z pewnymi różnicami.

2 Stos

Stack jest podklasą klasy Vector, która implementuje standardowy stos ostatni na wejściu, pierwszy na wyjściu.

3 Słownik

Dictionary to abstrakcyjna klasa, która reprezentuje repozytorium przechowywania kluczy / wartości i działa podobnie jak Map.

4 Hashtable

Hashtable był częścią oryginalnego java.util i jest konkretną implementacją słownika.

5 Nieruchomości

Właściwości to podklasa Hashtable. Służy do utrzymywania list wartości, w których klucz jest ciągiem, a wartość jest również ciągiem.

6 BitSet

Klasa BitSet tworzy specjalny typ tablicy, która przechowuje wartości bitowe. Ta tablica może w razie potrzeby zwiększyć rozmiar.

Algorytmy zbierania

Struktura kolekcji definiuje kilka algorytmów, które można zastosować do kolekcji i map. Te algorytmy są zdefiniowane jako metody statyczne w klasie Collections.

Kilka metod może spowodować wyświetlenie pliku ClassCastException, który występuje, gdy podejmowana jest próba porównania niezgodnych typów lub UnsupportedOperationException, który występuje, gdy podjęto próbę zmodyfikowania niemodyfikowalnej kolekcji.

Kolekcje definiują trzy zmienne statyczne: EMPTY_SET, EMPTY_LIST i EMPTY_MAP. Wszystkie są niezmienne.

Sr.No. Algorytm i opis
1 Algorytmy zbierania

Oto lista wszystkich implementacji algorytmów.

Jak używać iteratora?

Często będziesz chciał przeglądać elementy kolekcji. Na przykład możesz chcieć wyświetlić każdy element.

Najłatwiejszym sposobem jest użycie iteratora, który jest obiektem implementującym interfejs Iterator lub ListIterator.

Iterator umożliwia przechodzenie przez kolekcję, pobieranie lub usuwanie elementów. ListIterator rozszerza Iterator, aby umożliwić dwukierunkowe przechodzenie po liście i modyfikację elementów.

Sr.No. Metoda i opis iteratora
1 Korzystanie z iteratora Java

Oto lista wszystkich metod z przykładami dostarczonymi przez interfejsy Iterator i ListIterator.

Jak korzystać z komparatora?

Elementy TreeSet i TreeMap przechowują elementy w posortowanej kolejności. Jednak to komparator dokładnie definiuje, co oznacza posortowana kolejność .

Ten interfejs pozwala nam sortować daną kolekcję na wiele różnych sposobów. Ten interfejs może być również używany do sortowania dowolnych instancji dowolnej klasy (nawet klas, których nie możemy modyfikować).

Sr.No. Metoda i opis iteratora
1 Korzystanie z komparatora Java

Oto lista wszystkich metod wraz z przykładami dostarczonymi przez interfejs komparatora.

Podsumowanie

Struktura kolekcji Java daje programiście dostęp do wstępnie spakowanych struktur danych, a także do algorytmów służących do manipulowania nimi.

Kolekcja to obiekt, który może zawierać odwołania do innych obiektów. Interfejsy kolekcji deklarują operacje, które można wykonać na każdym typie kolekcji.

Klasy i interfejsy struktury kolekcji znajdują się w pakiecie java.util.