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 |
|||
AbstractList | List | Abstrakcyjna klasa zawierająca implementację interfejsu List |
|||
AbstractQueue | Queue | Abstrakcyjna klasa zawierająca implementację interfejsu Queue |
|||
AbstractSequentialList | List | Abstrakcyjna klasa zawierająca implementację interfejsu List |
|||
-
- 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 super T> c, T … elements | boolean | Wstawia elementy do kolekcji. Zwraca true jeżeli wstawiono |
asLifoQueue | Deque |
Queue |
Zwraca kolekcję jako kolejkę LIFO |
binarySearch | List extends T> list, T value, Comparator super T> c | int | Wykonujesz przeszukiwanie binarne, zwraca -1 jeżeli nie znaleziono |
checkedCollection | Collection |
Collection |
Zwraca kolekcję, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
checkedList | List |
List |
Zwraca listę, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
checkedMap | Map |
Map |
Zwraca mapę, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
checkedNavigableMap | NavigableMap |
NavigableMap |
Zwraca NavigableMap, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
checkedNavigableSet | NavigableSet |
NavigableSet |
Zwraca NavigableSet, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
checkedQueue | Queue |
Queue |
Zwraca kolejkę, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
checkedSet | Set |
Set |
Zwraca set, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
checkedSortedMap | SortedMap |
SortedMap |
Zwraca posortowaną mapę, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
checkedSortedSet | SortedSet |
SortedSet |
Zwraca posortowany set, gdzie wstawienie obiektu niegodnego typu generuje wyjątek ClassCastException |
copy | List super T> list1, List extends T> 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 |
Enumeration |
Zwraca wyliczenie dla kolekcji. |
fill | List super T> 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 |
ArrayList |
Zwraca elementy wyliczenia |
max | Collection extends T> c, Comparator super T> comp | T | Zwraca maksymalny obiekt |
min | Collection extends T> c, Comparator super T> comp | T | Zwraca minimalny obiekt |
nCopies | int num, T obj | List |
Zwraca num kopi objektu |
newSetFromMap | Map |
Set |
Tworzy i zwraca zbiór na podstawie przekazanej mapy. |
replaceAll | List |
boolean | Wyszukuje wystąpienie obiektu i zamienia go. Zwraca true jeżeli znalazł chociaż jedno |
reverse | List |
Odwraca listę | |
reverseOrder | Comparator |
Comparator |
Zwraca odwrotny komparator do przekazanego. |
rotate | List |
Przesuwa elementy listy w prawo o n jednostek, w lewo n ma być ujemne | |
shuffle | List |
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 |
Sortuje elementy listy. | |
swap | List |
Zamienia między sobą elementy listy o podanych indeksach. | |
synchronizedCollection | Collection |
Collection |
Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
synchronizedList | List |
List |
Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
synchronizedMap | Map |
Map |
Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
synchronizedNavigableMap | NavigableMap |
NavigableMap |
Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
synchronizedNavigableSet | NavigableSet |
NavigableSet |
Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
synchronizedSet | Set |
Set |
Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
synchronizedSortedMap | SortedMap |
SortedMap |
Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
synchronizedSortedSet | SortedSet |
SortedSet |
Zwraca kolekcję bezpieczną dla wątków (threadsafe) |
unmodifiableCollection | Collection extends T> c | Collection |
Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
unmodifiableList | List extends T> list | List |
Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
unmodifiableMap | Map extends K, ? extends V> m | Map |
Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
unmodifiableNavigableMap | NavigableMap |
NavigableMap |
Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
unmodifiableNavigableSet | Set extends T> s | Set |
Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
unmodifiableSet | Set extends T> s | Set |
Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
unmodifiableSortedMap | SortedMap extends K, ? extends V> sm | SortedMap |
Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
unmodifiableSortedSet | SortedSet extends T> ss | SortedSet |
Zwraca niemodyfikowalną kolekcję tylko do odczytu. |
Przykłady
Możliwość komentowania jest wyłączona.