poniedziałek, 28 kwietnia 2014

Java.Collections - Podstawy.

Kilka słów wprowadzenia...


Na wstępie zaznaczam, że jest to artykuł dla początkujących programistów Javy, lecz pojęcia takie jak interfejs czy podstawowe struktury danych nie powinny być czytelnikowi obce.
W poniższym artykule chciałbym omówić temat wbudowanych kolekcji w języku Java. Każdy adept programowania prędzej czy później spotka się z tym zagadnieniem, dlatego przybliżę czym są kolekcje i jakie są ich rodzaje. Po wstępie teoretycznym postaram się jasno pokazać jak się je definiuje oraz przedstawić proste przykłady ich wykorzystania.
Kolekcje to inaczej mówiąc kontenery na dane. Mogą przechowywać dowolne typy danych – zarówno wbudowane jak i zdefiniowane przez programistę. Zależnie od rodzaju posiadają różne właściwości takie jak możliwość duplikacji czy porządkowania danych. Aby zobrazować interfejsy z jakich wywodzą się niżej przedstawione kolekcje posłużę się schematem (wybaczcie prostotę - mój talent designerski nie jest na wysokim poziomie).

Każda z pokazanych implementacji (ArrayList, LinkedList, PriorityQueue, HashSet, TreeSet, HashMap, TreeMap) znajduje się w standardowym pakiecie „java.utils”. Jak można zauważyć implementacje list, kolejek(Queue) i zbiorów(Set) pochodzą ze wspólnego interfejsu Collection, natomiast mapy pochodzą z osobnego interfejsu.

Podstawowe metody interfejsu Collection:

add(E element)
remove(Object O)
size() – zwraca ilość elementów listy.
clear() – usuwa wszystkie elementy listy.

Listy


Najprostszymi i jednymi z najczęściej używanych kontenerów są listy. Jej elementy są uporządkowane (porządek oznacza, że wszystkie elementy są dostępne w takiej samej kolejności jak je dodaliśmy i posiadają relacje pomiędzy sąsiadami) oraz mają możliwość duplikacji w przestrzeni jednej listy.

Podstawowe operacje na listach:

add(int index,E element) – dodaje nowy element do listy.
remove(int index) – usuwa określony element z listy.
get(int index) – zwraca określony element listy.
indexOf(Object o) – zwraca indeks określonego obiektu w liście (jeśli taki istnieje).



Podstawowe operacje na listach w praktyce:

Wyniki działania programu w konsoli:

Liczba elementów listy: 6
Liczba elementów listy po usunięciu jednego z elementów: 5
Zwrócenie ostatniego elementu listy: Kamil


Kolejki


Kolejka jest jedną z podstawowych struktur danych. W zależności od implementacji elementy są dodawane i zwracane w różnej kolejności (LIFO,FIFO). LinkedList, która wykorzystuje zarówno interfejs List jak i Queue jest implementacją kolejki FIFO. W kolejkach mamy bezpośredni dostęp do pierwszego elementu – głowy, a reszta elementów tworzy ogon. Po usunięciu głowy, staje się nią pierwszy element ogona.

Podstawowe operacje na kolejkach:

offer(Object o) – dodaje element do kolejki.
poll() – zwraca głowę kolejki i usuwa ją.
peek() – zwraca głowę kolejki bez usuwania jej.



Podstawowe operacje na kolejkach w praktyce:

Wyniki działania programu w konsoli:
Liczba elementów kolejki: 6
Głowa kolejki :Jakub
Liczba elementów kolejki: 5
Zwrócenie kolejnej głowy kolejki: Kamil
Liczba elementów kolejki: 5


Zbiory


Zbiór jest kolekcją w której elementy są nieuporządkowane (nie istnieje żadna relacja między dwoma elementami zbioru). Ważną cechą zbioru jest również wykluczenie duplikatów – nie można przechowywać dwóch tych samych obiektów w przestrzeni jednego zbioru. Zbiory nie posiadają żadnych dodatkowych metod, poza tymi odziedziczonymi z interfejsu Collection.

Przykład pokazujący zachowanie zbioru przy próbie dodania duplikatu:

Wyniki działania programu w konsoli:
true
true
true
false
Liczba elementów zbioru: 3



Mapy


Mapy są kolekcją której elementy składają się z klucza i wartości. Wartości mogą się powtarzać, lecz klucze muszą być unikalne, nie ma możliwości przypisania dwóch wartości do jednego klucza.

Podstawowe operacje na mapach:
clear() – czyści całą mapę z wartości i kluczy.
containsKey(Object key) – Sprawdza czy dany klucz znajduje się w mapie.
containsValue(Object value) – Sprawdza czy dana wartość znajduje się w mapie.
get(Object key) - Zwraca wartość do której jest przypisany dany klucz.
put(K key, V value) – Wprowadza element (klucz - wartość) do mapy.
remove(Object key) – Usuwa wartość (i klucz) do którego przypisany jest klucz.
size() - Zwraca ilość elementów (par klucz – wartość) w mapie.


Podstawowe operacje na mapach w praktyce:

Wyniki działania programu w konsoli:
Ilość elementów w mapie: 4
Wartość dla klucza "Kamil": 150
Wartość dla klucza "Kamil": 200
Ilość elementów w mapie: 0



To wszystko co chciałem przedstawić w powyższym artykule. Temat kolekcji jest dość popularny i jego odkrywczość można porównać do odgrzewanych kotletów, jednakże nawet w odgrzanym kotlecie można odnaleźć rąbek smaku jeśli tylko odbiorca jest głodny (wiedzy). :-)


Źródła:
http://docs.oracle.com/javase/tutorial/collections/
http://wazniak.mimuw.edu.pl/images/3/32/Zpo-2-wyk.pdf

Brak komentarzy:

Prześlij komentarz