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.