Kolekcje w Javie oraz klasy narzędziowe z biblioteki java.util.Collections to bardzo potężne narzędzia do operowania na danych. Można stwierdzić za prawidłowe dobranie struktur danych oraz ich sposobów przechowywania, może bardzo zoptymalizować i przyśpieszyć działania programu. Czasami bardziej skutecznie niż „wysublimowane algorytmy i optymalizacje kodu”.
Przy używaniu kolekcji należy brać pod uwagę, nie tylko typ i zastosowanie danych, ale również ich wielkość. Jeżeli zastosujemy streamy z Javy 8 wraz z podziałem na wątki robocze do małego zbioru danych to otrzymamy mniejszą wydajność niż przy jednym wątku. Wynika to z tego, że podzielenie danych i utworzenie wątków przetwarzających, powtórne złączenie wyników zajmie więcej czasu niż praca w jednym wątku.
Warto pamiętać ze od Javy 5 kolekcje przyjmują obiekty sparametryzowane (Generyki). Ważne jest również w przypadku własnych obiektów które będą przechowywane w kolekcjach aby prawidłowo implementowały funkcję haszującą „hashCode()” oraz porównującą obiekty „equals ()”
Na start warto zapoznać się z najpopularniejszymi interfejsami z frameworka Collections:
| Interfejs | Duplikaty | Uporządkowany | Sortowany | Opis |
| Collection | TAK | NIE | NIE | Podstawowy interfejs kolekcji |
| List | TAK | TAK | NIE | Lista danych. Dostęp za pomocą indeksu, wstawianie na określanej pozycji |
| Set | NIE | NIE/TAK* | NIE/TAK* | Zbiór danych. Dane nie są przechowywane na określonej pozycji. |
| Queue | TAK | TAK | NIE | Kolejka danych. Realizuje kolejki FILO i FIFO |
| Map | NIE | NIE/TAK* | NIE/TAK* | Słownik danych. Nie jest to do końca kolekcja, ale bardziej słownik danych, gdzie następuje mapowanie klucz->wartość. |
| Deque | Rozszerzenie listy o obsługę kolejki dwukierunkowej | |||
| NavigableSet | Rozszerzenie zbioru o wyszukiwanie i pobieranie elementów według wzorca | |||
| SortedList | Rozszerzenie listy o sortowanie elementów | |||
| Spliterator | Wprowadzony w Javie 8 interfejs do operacji równoległych na danych zawartych w kolekcji. |
- – w zależności od klasy implementującej dany interfejs
a później z klasami implementujący dany interfejs, oraz na co dane implementacje pozwalają:
| Klasa | Interfejs | Porządkowany przez | Sortowanie | Duplikaty |
Opis |
| ArrayList | List | Indeks | Nie | Tak | Tablica o zmiennej długości. Szybki odczyt randomowy O(1), wolne wstawianie O(1) lub O(n), wolne usuwanie O(n) |
| LinkedList | List | Indeks | Nie | Tak | Połączona lista obiektów. Wolny odczyt randomowy O(n), szybkie foreach O(1), szybkie wstawianie O(1), szybkie usuwanie O(1) |
| Vector* | List | Indeks | Nie | Tak | Historyczna. Przechowywanie w tablicy, synchronizowana kolekcja danych. |
| HashMap | Map | Nie | Nie | Nie** | Przechowywanie wynika z implementacji funkcji hashCode() klucza. Wstawianie ma złożoność O(1), pobranie elementu O(h/n) |
| LinkedHashMap | Map | Wstawianie | Nie | Nie** | Kolejność danych zależna od kolejności wstawiania. Wstawianie O(1), pobranie O(1) |
| TreeMap | Map | Drzewo czerwono-czarne, zrównoważone | Tak | Nie** | Dane posortowane według porządku naturalnego klucza. Klucz powinien implementować iterfejs Comparable. Pobranie, wstawianie, usuwanie złożoność O(log n) |
| Hashtable* | Map | Nie | Nie | Nie | Historyczna, zamiast tego zaleca się używanie HashMap. Synchronizowana |
| HashSet | Set | Nie | Nie | Nie | Dane umieszczone w tablicy haszującej. Wstawianie na podstawie funkcji haszującej. Dodanie oraz sprawdzenie czy istnieje złożoność O(1), pobranie następnego elementu O(n) lub O (h/n) |
| LinkedHashSet | Set | Wstawianie | Nie | Nie | Dane umieszczone w tablicy haszującej i liście połączonej. Wstawianie, sprawdzenie, pobranie następnego złożoność O(1) |
| TreeSet | Set | Sortowanie, Drzewo czerwono-czarne | Tak | Nie | Dane przechowywane w drzewie binarnym. Wstawianie, sprawdzenie, pobranie następnego złożoność O(log n) |
| EnumSet | Set | Nie | Nie | Nie | Implementacja przy pomocy tablicy bitów. Wstawianie, sprawdzenie, pobranie następnego złożoność O(1) |
| PriorityQueue | Queue | Priorytet | Tak | Tak | |
| ArrayDeque | Deque | Priorytet | Nie | Tak | Implementacja podwójnej kolejki o dostępie od początku i końca kolejki |
| AbstractCollection | Collection | Abstrakcyjna klasa. Zawiera większość implementacji interfejsu Iterable, Collection | |||
| AbstractList | List | Abstrakcyjna klasa zawierająca implementację interfejsu List o dostępie randomowym. | |||
| AbstractQueue | Queue | Abstrakcyjna klasa zawierająca implementację interfejsu Queue | |||
| AbstractSequentialList | List | Abstrakcyjna klasa zawierająca implementację interfejsu List o dostępie sekwencyjnym. | |||
-
- stare, zalecane nie używanie ** – klucze nie mogą być duplikatami, wartości mogą się powtarzać
Przy pracy na kolekcjach w Javie nie można zapomnieć o metodach realizujących operacje na kolekcjach zawartych w java.util.Collections.
| Metoda | Parametry | Zwraca |
Opis |
| addAll | Collection c, T … elements | boolean | Wstawia elementy do kolekcji. Zwraca true jeżeli wstawiono |
| asLifoQueue | Deque c | Queue | Zwraca kolekcję jako kolejkę LIFO |
| binarySearch | List list, T value, Comparator c | int | Wykonujesz przeszukiwanie binarne, zwraca -1 jeżeli nie znaleziono |
| checkedCollection | Collection c, Class t | Collection | Zwraca kolekcję, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
| checkedList | List c, Class t | List checkedList | Zwraca listę, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
| checkedMap | Map c, Class keyT, Class valueT | Map | Zwraca mapę, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
| checkedNavigableMap | NavigableMap nm, Class keyT, Class valueT | NavigableMap | Zwraca NavigableMap, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
| checkedNavigableSet | NavigableSet ns, Class t | NavigableSet | Zwraca NavigableSet, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
| checkedQueue | Queue q, Class t | Queue | Zwraca kolejkę, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
| checkedSet | Set c, Class t | Set | Zwraca set, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
| checkedSortedMap | SortedMap c, Class keyT, Class valueT | SortedMap | Zwraca posortowaną mapę, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
| checkedSortedSet | SortedSet c, Class t | SortedSet checkedSortedSet | Zwraca posortowany set, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
| copy | List list1, List list2 | Kopiuje elementy listy: list2 do list1 | |
| disjoint | Collection a, Collection b | boolean | Sprawdza czy kolekcje nie mają elementów wspólnych. Zwraca true jeżeli nie mają. |
| emptyEnumeration | Enumeration | Zwraca puste wyliczenie. | |
| emptyIterator | Iterator | Zwraca pusty iterator. | |
| emptyList | List | Zwraca pustą niemodyfikowalną (Final) listę. | |
| emptyListIterator | ListIterator | Zwraca pusty iterator listy | |
| emptyMap | Map | Zwraca pustą niemodyfikowalną (Final) mapę. | |
| emptyNavigableMap | NavigableMap | Zwraca pusty niemodyfikowalny (Final) obiekt NavigableMap. | |
| emptyNavigableSet | NavigableSet | Zwraca pusty niemodyfikowalny (Final) obiekt NavigableSet. | |
| emptySet | Set | Zwraca pusty niemodyfikowalny (Final) obiekt Set. | |
| emptySortedMap | SortedMap | Zwraca pusty niemodyfikowalny (Final) obiekt SortedMap. | |
| emptySortedSet | SortedSet | Zwraca pusty niemodyfikowalny (Final) obiekt SortedSet. | |
| enumeration | Collection c | Enumeration | Zwraca wyliczenie dla kolekcji. |
| fill | List list, T obj | Wypełnia daną listę | |
| frequency | Collection c, Object obj | int frequency | Zwraca ilość wystąpień obiektu w kolekcji |
| indexOfSubList | List list, List subList | int | Zwraca indeks pierwszego wystąpienia sublisty lub –1 jeżeli nie znaleziono |
| lastIndexOfSubList | List list, List subList | int | Zwraca indeks ostatniego wystąpienia sublisty lub –1 jeżeli nie znaleziono |
| list | Enumeration enum | ArrayList | Zwraca elementy wyliczenia |
| max | Collection c, Comparator comp | T | Zwraca maksymalny obiekt |
| min | Collection c, Comparator comp | T | Zwraca minimalny obiekt |
| nCopies | int num, T obj | List | Zwraca num kopi objektu |
| newSetFromMap | Map m | Set | Tworzy i zwraca zbiór na podstawie przekazanej mapy. |
| replaceAll | List list, T old, T new | boolean | Wyszukuje wystąpienie obiektu i zamienia go. Zwraca true jeżeli znalazł chociaż jedno |
| reverse | List list | Odwraca listę | |
| reverseOrder | Comparator comp | Comparator | Zwraca odwrotny komparator do przekazanego. |
| rotate | List list, int n | Przesuwa elementy listy w prawo o n jednostek, w lewo n ma być ujemne | |
| shuffle | List list, Random r | Wymiesza elementy listy | |
| singleton | T obj | Set | Zwraca obiekt jako niemodyfikowalny zbór. |
| singletonList | T obj | List | Zwraca obiekt jako niemodyfikowalną listę. |
| singletonMap | K k, V v | Map | Zwraca klucz i wartość jako niemodyfikowalną mapę. |
| sort | List list | <T extends Comparable> | Sortuje elementy listy. |
| swap | List list, int idx1, int idx2 | Zamienia między sobą elementy listy o podanych indeksach. | |
| synchronizedCollection | Collection c | Collection | Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
| synchronizedList | List list | List | Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
| synchronizedMap | Map m | Map | Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
| synchronizedNavigableMap | NavigableMap nm | NavigableMap | Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
| synchronizedNavigableSet | NavigableSet nm | NavigableSet | Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
| synchronizedSet | Set s | Set synchronizedSet() | Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
| synchronizedSortedMap | SortedMap sm | SortedMap | Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
| synchronizedSortedSet | SortedSet ss | SortedSet | Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
| unmodifiableCollection | Collection c | Collection | Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
| unmodifiableList | List list | List | Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
| unmodifiableMap | Map m | Map | Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
| unmodifiableNavigableMap | NavigableMap nm | NavigableMap | Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
| unmodifiableNavigableSet | Set s | Set | Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
| unmodifiableSet | Set s | Set | Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
| unmodifiableSortedMap | SortedMap sm | SortedMap | Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
| unmodifiableSortedSet | SortedSet ss | SortedSet | Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
Przykłady
Możliwość komentowania jest wyłączona.