You are on page 1of 79

JAVA ADVANCED

Collections and Generics Framework


ICT Akademija, Banja Luka

Generiki tipovi

Generiki tipovi
compile-time bug-ovi
run-time bug-ovi
generiki tipovi daju stabilnost omoguavaju
detekciju odreenih greaka za vrijeme
kompajliranja
Java Collections Framework koristi generike
tipove

ICT Akademija 2012

Generiki tipovi

prije:

public class Holder{


private Object object;
public void set(Object object) {
this.object = object;
}
public Object get() {
return object;
}
}

java.lang.ClassCastException

public class Test {


public static void main(String[] args) {
Holder integerHolder = new Holder();
integerHolder.set("10");
Integer otherInteger = (Integer) integerHolder.get();
System.out.println(otherInteger);
}
}

ICT Akademija 2012

Generiki tipovi
generiki tip je referencni tip u ijoj se deklaraciji
iza naziva tipa nalazi lista parametara
ovi parametri se nazivaju i tipski parametri,
promjenljive tipa ili tipske promjenljive
ovi tipovi moraju biti poznati u vrijeme
kompajliranja kako bi se generiki tip mogao
koristiti

ICT Akademija 2012

Generiki tipovi
sad:
public class Holder<T>{
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}

deklaracija
generikog tipa

tipska
promjenljiva

T tipska promjenljiva:

moe se koristiti bilo gdje u klasi. Ista tehnika se moe primijeniti i na interfejse.
moe biti bilo koji klasni tip,
moe biti bilo koji tip interfejsa,
ne moe biti primitivni tip podataka.
ICT Akademija 2012

Generiki tipovi
Holder<Integer> integerHolder = new
Holder<Integer>();

public class Test {


public static void main(String[] args) {
Holder<Integer> integerHolder = new
Holder<Integer>();
integerHolder.set("10");
Integer otherInteger =
integerHolder.get();
System.out.println(otherInteger);
}
}
pokuaj ubacivanja nekompatibilnog tipa u Holder - greka
ICT Akademija 2012

Generiki tipovi
tipskoj promjenljivoj T moe se pristupiti iz nestatikog
konteksta
tipskoj promjenljivoj T ne moe se pristupiti iz statikog
konteksta
razlog ovog je to je tipska promjenljiva nestatika i ne
moe se koristiti u statikom kontekstu iz istog razloga kao
i bilo koja druga nestatika promjenljiva
generiki tipovi obuhvataju i generike interfejse

deklaracija generikih interfejsa se ne razlikuje od


deklaracije interfejsa, osim uvoenja tipske promjenljive
ICT Akademija 2012

Parametrizovani tipovi
parametrizovani tip predstavlja koritenje generikog
tipa gdje su tipske promjenljive zamijenjene
parametrima stvarnog tipa
ovaj koncept slian je deklaraciji i koritenju metoda
da bi koristili metodu moramo, pri njenom pozivu,
proslijediti stvarne parametre
isto tako, da bi instancirali generiki tip, potrebno je
da mu proslijedimo parametre stvarnog tipa
deklarisanje referenci i kreiranje objekata
parametrizovanih tipova, kao i pozivi metoda nad
ovim objektima, slino je kao kod negenerikih klasa
ICT Akademija 2012

Parametrizovani tipovi

instanciranja generikog tipa GenericHolder kojem je kao parametar


stvarnog tipa prosljeen Integer
ovako se tipska promjenljiva T mijenja stvarnim tipom Integer nastaje
parametrizovani tip GenericHolder<Integer>
referenca
integerHolder
moe
referencirati
samo
objekte
parametrizovanog tipa GenericHolder<Integer>
pri pozivima set i get metoda stvarni tipovi argumenta i povratnog tipa
odreuju se na osnovu tipa reference nad kojom se metode pozivaju - kako je
referenca integerHolder tipa GenericHolder<Integer>, jasno je da
metoda set kao argument prima, a metoda get kao rezultat vraa objekat
tipa Integer - kako je ovo poznato kompajleru (u trenutku prevoenja
programa), nisu potrebna eksplicitna kastovanja tipova.
ICT Akademija 2012

10

Parametrizovani tipovi
zamjenom tipskih promjenljivih parametrima razliitih
stvarnih tipova nastaju razliiti parametrizovani tipovi
izmeu njih ne postoji veza
tako
su
parametrizovani
tipovi
GenericHolder<Integer>
i
GenericHolder<String> razliiti i izmeu njih ne
postoji veza
kompajler e prijaviti svaki pokuaj nepravilne upotrebe
parametrizovanog tipa
na ovaj nain potencijalne greke mogu biti
detektovane ranije, za vrijeme kompajliranja
upotreba eksplicitnog kastovanja u izvornom kodu je
minimalizovana
ICT Akademija 2012

11

Parametrizovani tipovi
parametrizacija generikih interfejsa vri se na isti nain kao i parametrizacija
generikih klasa

razliita upotreba konstrukcije <T> u deklaraciji klase GenericHolder2


prvo pojavljivanje konstrukcije <T> oznaava tipsku promjenljivu
drugo pojavljivanje konstrukcije <T> parametrizuje generiki interfejs istom
tipskom promjenljivom (T)
ICT Akademija 2012

12

Nasljeivanje generikih tipova


generiki tip koji nije deklarisan kao final moe biti nasljeen

kompajler provjerava da li tipske promjenljive roditeljske klase navedene u


extends klauzuli mogu biti razrijeene u prethodnom primjeru tipska
promjenljiva T generike klase GenericSub (klase nasljednice) koristi se i kao
parametar klase GenericBase (osnovna klasa) ova veza obezbjeuje da e
tipske promjenljive biti zamijenjene istim stvarnim tipom u obje klase
ICT Akademija 2012

13

Nasljeivanje generikih tipova

ICT Akademija 2012

14

Nasljeivanje generikih tipova


ponekad je potrebno da se ogranie tipovi koji se mogu koristiti za
parametrizaciju

generika klasa GenericNumberSub nasljeuje generiku klasu


GenericBase postavljajui gornju granicu tipa koji moe biti
prosljeen kao parametar
parametrizacija ove generike klase moe se izvriti prosljeivanjem
klase Number ili bilo koje klase koja nasljeuje klasu Number
kljuna rije extends se koristi u irem smislu, i obuhvata semantiku
standardnog koritenja kljunih rijei extends (kad nasljeivanja) i
implements (kod implementacije interfejsa)
ako je potrebno dodatno navesti i jedan ili vie interfejsa koje je
potrebno implementirati potrebno je koristiti znak & izmeu
naziva interfejsa ili izmeu naziva klase i interfejsa
ICT Akademija 2012

15

Nasljeivanje generikih tipova


mogue

je

da

generiki

tip

naslijedi

negeneriki

mogue je i da konkretan tip naslijedi parametrizovani tip

konkretna klasa ne moe naslijediti generiki tip


ICT Akademija 2012

16

Brisanje tipova
kompajler prevodi generiku klasu tako da brie
informacije o tipskim promjenljivim
ovaj proces naziva se brisanje tipova (eng. type
erasure)
ako se program kompajlira bez unchecked
upozorenja, kompajler garantuje da e sigurnost
tipova za vrijeme izvravanja biti obezbjeena

ICT Akademija 2012

17

Brisanje tipova

generike klase mogue je koristiti bez parametrizacije, kao negenerike klase


kompajler e prijaviti unchecked upozorenja ako koritenje generike klase bez
parametrizacije moe rezultirati potencijalnim problemom za vrijeme izvravanja
ovakvo koritenje generikih klasa je dozvoljeno zbog zadravanja kompatibilnosti sa
ranijim verzijama Jave, u kojim generike klase nisu postojale, ali se ne preporuuje kod
razvoja novih aplikacija

uvijek je mogue dodijeliti vrijednost reference parametrizovanog tipa referenci


neparametrizovanog tipa, jer je on supertip parametrizovanog tipa
ova referenca moe se koristiti na takav nain da se narui sigurnost tipova za
vrijeme izvravanja
ICT Akademija 2012

18

Kolekcije

Kolekcije
kolekcija nekad se naziva i kontejner
kolekcija je objekt koji grupie vie elemenata u jednu
jedinicu
koriste se za pohranjivanje, dobijanje, manipulaciju i
komunikaciju skupom podataka
obino reprezentuju jedinice podataka koji ine prirodnu grupu
npr.:
mail folder kolekcija poruka
telefonski imenik mapiranje imena u telefonske brojeve
ranije verzije Jave (prije 1.2) obuhvatale se Vector, Hashtable i
niz implementacije kolekcija
ranije verzije Jave (prije 1.2) nisu posjedovale Collections
framework

ICT Akademija 2012

20

Collection Framework
Collections framework je unificirana arhitektura za
reprezentaciju i manipulaciju kolekcijama
posjeduje:
interfejse koji omoguavaju manipulaciju kolekcijama
nezavisno od njihove konkretne implementacije
implementacije konkretne implementacije interfejsa
algoritme metode koje vre korisne operacije, kao to
su pretraivanje i sortiranje, nad objektima klasa koje
implementiraju interfejse kolekcija algoritmi su
polimorfni, tj. ista metoda se moe koristiti nad mnogim
razliitim implementacijama odgovarajueg interfejsa
kolekcija
ICT Akademija 2012

21

Java Collections Framework


prednosti:
redukuje programerski napor
poveava brzinu i kvalitet programa
omoguava
interoperabilnost
izmeu
nepovezanih API-ja
redukuje napor neophodan za uenje i
koritenje novih API-ja
redukuje napor neophodan za dizajniranje
novih API-ja
ohrabruje reupotrebu koda
ICT Akademija 2012

22

Java Collections Framework


osnovni interfejsi kolekcija omoguavaju manipulaciju
kolekcijama nezavisno od detalja njihove reprezentacije
osnovni interfejsi kolekcija su temelj JCF-a
osnovni interfejsi kolekcija kreiraju hijerarhiju

postoje 2 stabla kolekcija


osnovni interfejsi kolekcija su generiki npr. deklaracija
Collection interfejsa
public interface Collection<E>
ICT Akademija 2012

23

Java Collections Framework


Collection root hijerarhije kolekcija
interfejs Collection je najmanji zajedniki imenitelj kojeg
implementiraju sve kolekcije i koristi se za prosljeivanje i
manipulaciju kolekcijama u sluaju kada je potrebna
maksimalna generalizacija
implementacije interfejsa iz JCF ne moraju podravati sve
operacije
ako je pozvana operacija koja nije podrana, bie baen
UnsupportedOperationException izuzetak
kolekcija predstavlja grupu objekata elemenata, pri emu:
neke kolekcije dozvoljavaju duple elemente, a neke ne
neke kolekcije su ureene, a neke nisu
ne postoji direktna implementacija interfejsa Collection, ali
postoje implementacije podinterfejsa, npr. Set i List
ICT Akademija 2012

24

Java Collections Framework

Set
predstavlja skup jedinstvenih elemenata kolekcija koja ne moe sadravati duple elemente. Ovaj
interfejs predstavlja apstrakciju matematikog skupa.
SortedSet
nasljeuje Set interfejs dodajui mu mogunost sortiranja elemenata na odgovarajui nain
NavigableSet
nasljeuje SortedSet interfejs proirujui ga navigacionim metodama
List
ureena kolekcija (nekad se naziva i sekvenca)
moe sadravati duple elemente
elementima se moe pristupiti na bazi indeksa (pozicije)
slinost sa Vector klasom
Queue
kolekcija koja sadri elemente koje se trebaju procesirati
obino, ali ne obavezno, ureuju elemente u FIFO red izuzetak su prioritetni redovi
glavu reda ini element koji e biti uklonjen pozivom metode remove ili poll
novi elementi se dodaju na kraj reda, rep
drugi tipovi redova mogu koristiti drugaija pravila za smjetanje elemenata
Deque
nasljeuje Queue interfejs na takav nain da predstavlja red iji se elementi mogu procesirati s oba
kraja

ICT Akademija 2012

25

Java Collections Framework


Map
objekat koji mapira kljueve u vrijednosti
ne moe sadravati duple kljueve svaki klju se moe
mapirati u najvie jednu vrijednost
slinost sa Hashtable klasom
SortedMap
Map koji sadri mapiranja na takav nain da su kljuevi
u rastuem poretku
Map analogija SortedSet-a
NavigableMap
nasljeuje SortedMap interfejs proirujui ga
navigacionim metodama
ICT Akademija 2012

26

Collection interfejs
Collection interfejs predstavlja grupu objekata - elemenata
Collection interfejs se koristi za manipulaciju kolekcijama u
sluaju kada je potrebna maksimalna generalizacija
sve implementacije kolekcija, po konvenciji, imaju
konstruktor koji kao argument ima Collection
ovaj konstruktor omoguava konverziju tipova kolekcije
naziva se i conversion konstruktor
primjer
Collection<String> c koji moe biti List, Set, ili druga
kolekcija (Collection tipa).
List<String> list = new ArrayList<String>(c);

kreirana je ArrayList (implementacija List interfejsa),


koja inicijalno sadri sve elemente iz c
ICT Akademija 2012

27

Collection interfejs

boolean add(E e)
obezbjeuje da kolekcija sadri specificirani element ako e nije u kolekciji bie dodati; ako kolekcija
dozvoljava duple elemente e e biti dodat
vraa true ako je kolekcija izmijenjena
opciona operacija
boolean addAll(Collection<? extends E> c)
dodaje sve elemente specificirane kolekcije u tekuu kolekciju
opciona operacija
void clear()
uklanja sve elemente iz kolekcije
opciona operacija
boolean contains(Object o)
vraa true ako kolekcija sadri specificirani element
boolean containsAll(Collection<?> c)
vraa true ako kolekcija sadri sve elemente specificirane kolekcije
boolean equals(Object o)
poreenje specificiranog objekta sa tekuom kolekcijom
int hashCode()
vraa hash code tekue kolekcije
boolean isEmpty()
vraa true ako kolekcija ne sadri elemente

ICT Akademija 2012

28

Collection interfejs

Iterator<E> iterator()
vraa iterator nad elementima tekue kolekcije
boolean remove(Object o)
uklanja jednu instancu specificiranog elementa iz kolekcije, ako je prisutan
opciona operacija
boolean removeAll(Collection<?> c)
uklanja sve elemente kolekcije koji su sadrani u specificiranoj kolekciji
opciona operacija
boolean retainAll(Collection<?> c)
ostavlja sve elemente tekue kolekcije koji su sadrani u specificiranoj kolekciji
opciona operacija
int size()
vraa broj elemenata kolekcije
Object[] toArray()
vraa niz koji sadri sve elemente kolekcije
<T> T[] toArray(T[] a)
vraa niz koji sadri sve elemente kolekcije, runtime tip vraenog niza je identian tipu specificiranog
niza
String[] y = x.toArray(new String[0]);

ICT Akademija 2012

29

Collection interfejs

ICT Akademija 2012

30

Collection interfejs
obilazak kolekcija
for-each konstrukcija
for (Object o : collection)
System.out.println(o);

iteratori
public interface Iterator<E> {
boolean hasNext();
E next();
void remove(); //opciono
}
------------------------------------------------public interface Collection<E>extends Iterable<E>

Iterator se koristi umjesto for-each konstrukcije kada je neophodno:


ukloniti tekui element for-each konstrukcija sakriva iterator, tako
da se ne moe pozvati remove()
iterirati preko viestrukih kolekcija paralelno
ICT Akademija 2012

31

Collection interfejs
obilazak kolekcija

ICT Akademija 2012

32

Set interfejs
Set je Collection koja ne moe sadravati duple
elemente
apstrakcija je matematikog skupa
Set interfejs sadri samo metode nasljeene iz
Collection i dodaje restrikciju zabranjuje duple
elemente

ICT Akademija 2012

33

Set interfejs

Set uvodi snaniji ugovor po pitanju ponaanja equals i hashCode metoda omoguava da se Set
instance porede bez obzira na njihovu implementaciju dvije Set instance su jednake, ako sadre iste
elemente

public interface Set<E> extends Collection<E> {


int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(E element);
// opciona
boolean remove(Object element);
// opciona
Iterator<E> iterator();
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
// opciona
boolean removeAll(Collection<?> c);
// opciona
boolean retainAll(Collection<?> c);
// opciona
void clear(); // opciona
Object[] toArray();
<T> T[] toArray(T[] a);
boolean equals(Object o);
int hashCode();
}
ICT Akademija 2012

34

Set interfejs implementacije


HashSet i LinkedHashSet
HashSet uva elemente u hash tabeli
implementacija sa najboljim performansama
nema garancija po pitanju redoslijeda iteracija
LinkedHashSet implementirana kao hash tabela
sa ulananom listom ureuje elemente prema
redoslijedu ubacivanja

ICT Akademija 2012

35

SortedSet interfejs
nasljeuje Set interfejs dodajui mu mogunost sortiranja
elemenata na odgovarajui nain
svi elementi SortedSet-a moraju implementirati
Comparable interfejs (ili implementirati Comparator)
metode

obilazak elemenata koritenjem for petlje ili iteratora e


biti obavljen na nain kako su elementi sortirani
ICT Akademija 2012

36

NavigableSet interfejs
interfejs NavigableSet nasljeuje SortedSet
interfejs proirujui ga navigacionim metodama
navigacione metode slue za pronalazak
elemenata u kolekciji koja implementira interfejs
NavigableSet
preporuka je da se koristi umjesto SortedSet
interfejsa

ICT Akademija 2012

37

NavigableSet interfejs

ICT Akademija 2012

38

NavigableSet interfejs implementacije


klasa TreeSet implementira NavigableSet interfejs, a samim tim
i SortedSet interfejs
elementi ovog skupa, tj. elementi objekta ove klase, nalaze se u
prirodnom poretku ili u poretku koji definie komparator
koji od ova dva naina e biti primjenjen zavisi od koritenog
konstruktora
implementacija TreeSet klase bazirana je na balansiranom
stablu, tako da je sloenost osnovnih operacija (dodavanja
elementa, uklanjanja elementa i pretraivanje) nad ovom
strukturom O(logn)
HashSet ima bolje performanse od TreeSet-a kad je u pitanju
pretraivanje elemenata, dok TreeSet ima bolje performanse
kada elementi moraju biti sortirani, a kada se zahtjeva njihovo
brzo pretraivanje i ubacivanje
ICT Akademija 2012

39

TreeSet primjer

ICT Akademija 2012

40

HashSet vs TreeSet
HashSet:
konstantno vrijeme za osnovne operacije (add, remove, contains i size)
ne garantuje da e poredak elemenata biti ouvan
vrijeme iteracije kroz ovaj skup je proporcionalno sumi broja elemenata
(veliini HashSet instance) i kapaciteta pozadinske HashMap instance zato
je bitno da inicijalni kapacitet ne bude suvie veliki (ili da load factor ne
bude suvie mali), ako su performanse iteracije bitne)
TreeSet:
sloenost osnovnih operacija (add, remove i contains) nad ovom
strukturom O(logn)
garantuje da e elementi skupa biti sortirani (rastue u prirodnom poretku
ili u poretku koji definie komparator)
ne nudi parametre ijim podeavanjem se moe uticati na performanse
iteracije
nudi zgodne metode za rad sa skupovima, poput first(), last(), headSet(),
tailSet() i sl.

ICT Akademija 2012

41

List interfejs

List je ureena kolekcija Collection (nekad se naziva i sekvenca)


liste mogu sadravati duple elemente
pored metoda nasljeenih iz Collection interfejsa, List interfejs dodaje i metode za:
pozicioni pristup manipulie elementima na bazi njihove pozicije u listi
pretragu pretraivanje objekta u listi i vraanje njegove numerike pozicije
iteraciju
range-view range operacije nad listom, npr. subList
slinost sa klasom Vector uklanja nekoliko manjih API nedostataka klase Vector npr.,
odgovarajue metode elementAt i setElementAt iz klase Vector imaju kraa imena get
i set
niz:
Vector:
List:

x[3] = "abc";
x.setElementAt("abc", 3);
x.set(3, "abc");

niz:
a[i] = a[j].method(a[k]);
Vector:
v.setElementAt(v.elementAt(j).method(v.elementAt(k)), i);
List:
v.set(i, v.get(j).method(v.get(k)));
ICT Akademija 2012

42

List interfejs
public interface List<E> extends Collection<E> {
// pozicioni pristup
E get(int index);
E set(int index, E element);
// opciona
boolean add(E element);
// opciona
void add(int index, E element);
// opciona
E remove(int index);
// opciona
boolean addAll(int index, Collection<? extends E> c);
// opciona
// pretraga
int indexOf(Object o);
int lastIndexOf(Object o);
ListIterator<E> listIterator();
ListIterator<E> listIterator(int index);
// dio liste
List<E> subList(int from, int to);
}
ICT Akademija 2012

43

List interfejs implementacija


klasa ArrayList implementira List interfejs
rije je o nizu promjenljive duine
ova klasa implementira sve opcione metode List interfejsa i dozvoljava
smjetaj elemenata bilo kojeg tipa, ukljuujui i null
ova klasa je slina Vector klasi, osim to nije sinhronizovana
sloenost metoda size, isEmpty, get, set, iterator i listIterator je O(1)
metoda add se izvrava u amortizovanom konstantnom vremenu, tj.
sloenost dodavanja n elemenata iznosi O(n)
sve druge metode izvravaju se u linearnom vremenu, tj. njihova
sloenost iznosi O(n)
svaka instanca klase ArrayList ima kapacitet
kapacitet predstavlja veliinu niza koja je potrebna da se smjeste
elementi liste
kapacitet je, minimalno, jednak veliini liste
kako se elementi dodaju u listu, tako se poveava i kapacitet
nije sinhronizovana potrebna je eksterna sinhronizacija
ICT Akademija 2012

44

List interfejs implementacija


klasa LinkedList implementira List interfejs
ova klasa implementira sve opcione metode List
interfejsa i dozvoljava smjetaj elemenata bilo
kojeg tipa, ukljuujui i null
ova klasa implementira i Queue i Deque
interfejse, tako da se moe koristiti za kreiranje
steka i razliitih vrsta redova

ICT Akademija 2012

45

List interfejs implementacija


klasa Vector implementira List interfejs
ova klasa je slina ArrayList klasi, s tim to je i
sinhronizovana
objekat klase Vector efikasno moe da upravlja
prostorom za smjetanje elemenata podeavanjem
njegovog kapaciteta i veliine inkrementa u kojima
se poveava kapacitet
kapacitet je, najee, vei od veliine ove kolekcije,
jer se kapacitet uveava u inkrementima
veliina inkrementa definisana je atributom
capacityIncrement
ICT Akademija 2012

46

Queue interfejs
interfejs Queue nasljeuje Collection interfejs na takav nain da
predstavlja red
obino, ali ne obavezno, elementi se ureuju prema FIFO
algoritmu
mogue je da elementi budu ureeni i prema LIFO (Last In First
Out) algoritmu ili prema prioritetu
kod prioritetnih redova, elementi mogu biti u prirodnom
poretkom ili poretku koji je odreen komparatorom

Queue interfejs metode kojim proiruje Collection


ICT Akademija 2012

47

Queue interfejs
svaka Queue metoda postoji u dva oblika, i to:
metoda baca izuzetak ako operacija ne uspije
metoda vraa specijalnu vrijednost ako
operacija ne uspije null ili false, zavisno od
operacije
baca izuzetak

vraa specijalnu vrijednost

insert

add(e)

offer(e)

remove

remove()

poll()

examine

element()

peek()

ICT Akademija 2012

48

Queue interfejs implementacije


klasa PriorityQueue implementira interfejs Queue
ako se ne trai mogunost bidirekcionog obilaska, onda je preporuka da
se koristi ova implementacija, prije nego LinkedList
klasa PriorityQueue predstavlja implementaciju reda sa prioritetnim
poretkom elementata
ova implementacija bazirana je na prioritetnom heap-u
u sluaju kada postoji vie elemenata sa istim prioritetom, poredak tih
elemenata se odreuje proizvoljno
ova klasa nije sinhronizovana
sloenost metoda offer, poll, add i remove iznosi O(log(n))
metode remove(Object) i contains(Object) izvravaju se u linearnom
vremenu, tj. njihova sloenost iznosi O(n)
metode peek, element i size izvravaju se u konstantnom vremenu, tj.
njihova sloenost iznosi O(1)
ICT Akademija 2012

49

Queue interfejs implementacije


klasa LinkedList implementira interfejs Queue

ICT Akademija 2012

50

Interfejs Deque
interfejs Deque nasljeuje Queue interfejs na takav nain
da predstavlja linearnu kolekciju koja podrava ubacivanje
i uklanjanje elemenata sa oba kraja, tj. dozvoljava i
operacije nad repom, a ne samo nad glavom reda
veina implementacija ovog interfejsa nema ogranienje
broja elemenata koje moe sadravati, mada interfejs
obezbjeuje i tu mogunost
klase koje implementiraju ovaj interfejs mogu se koristiti
kao FIFO redovi, s tim da se elementi dodaju s repa, a
uzimaju s glave reda
pored toga, klase koje implementiraju ovaj interfejs mogu
se koristiti kao stek, s tim da se elementi dodaju i uzimaju
sa iste strane reda, prema LIFO algoritmu
ICT Akademija 2012

51

Interfejs Deque

ICT Akademija 2012

52

Interfejs Deque
klasa ArrayDeque implementira interfejs Deque
ova implementacija nema ogranienje kapaciteta, tj. objekat ove klase
dinamiki raste koliko je to potrebno
ova klase nije sinhronizovana, tj. bez eksterne sinhronizacije, ona ne
podrava konkurentni pristup od strane vie niti
u ovu kolekciju nije dozvoljeno dodavati null elemente
elementi ove strukture se mogu obilaziti od glave prema repu ili
obrnuto, od repa prema glavi
pozicioni pristup elementima nije mogu, niti ih je mogue sortirati
veina metoda ArrayDeque klase izvrava se u amortizovanom
konstantnom vremenu. Tako, na primjer, sloenost dodavanja n
elemenata iznosi O(n).
izuzetak
su
metode
remove,
removeFirstOccurrence,
removeLastOccurrence, contains, iterator.remove() i bulk metode, koje
se izvravaju u linearnom vremenu, tj. njihova sloenost iznosi O(n)

ICT Akademija 2012

53

Interfejs Deque

ICT Akademija 2012

54

Interfejs Deque
klasa LinkedList implementira i interfejs Deque

ICT Akademija 2012

55

Map interfejs
interfejs Map predstavlja korijen drugog stabla hijerarhije
kolekcija
ovaj interfejs definie metode za rad sa mapiranjima
(parovima) klju-vrijednost
ova struktura ne moe da sadri duple kljueve, a svaki klju se
moe mapirati u najvie jednu vrijednost
ne postoji veza vie-prema-jedan izmeu kljueva i vrijednosti
i kljuevi i vrijednosti moraju biti objekti.
interfejs Map specificira ugovor koji sve mape treba da
implementiraju neke od metoda ovog interfejsa su opcione
mapa koja ne implementira neku od metoda ovog interfejsa
obavezna je da obezbijedi da data metoda baci izuzetak
UnsupportedOperationException, u sluaju njenog poziva
slinost sa HashTable klasom
ICT Akademija 2012

56

Map interfejs
public interface Map<K,V> {
// osnovne operacije
V put(K key, V value);
V get(Object key);
V remove(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
int size();
boolean isEmpty();
// grupne operacije
void putAll(Map<? extends K, ? extends V> m);
void clear();
// konverzije
public Set<K> keySet();
public Collection<V> values();
public Set<Map.Entry<K,V>> entrySet();
// interfejs za entrySet elemente
public interface Entry {
K getKey();
V getValue();
V setValue(V value);
}
}

ICT Akademija 2012

57

Map interfejs implementacije


klasa HashMap implementira Map interfejs
ova klasa predstavlja neureenu mapu (nema garancije poretka
elemenata), implementira sve opcione metode Map interfejsa i
dozvoljava dodavanje jednog null kljua u ovu strukturu
ova klasa nije sinhronizovana, tj. bez eksterne sinhronizacije,
ona ne podrava konkurentni pristup od strane vie niti
osnovne metode za uzimanje elemenata iz, i dodavanje
elemenata u ovu strukturu izvravaju se u konstantnom
vremenu, tj. njihova sloenost iznosi O(1)
iteracija kroz elemente kolekcije nastale pozivom metoda za
konverziju u kolekcije zahtijeva vrijeme proporcionalno
kapacitetu objekta klase HashMap i njegovoj veliini (broju
klju-vrijednost mapiranja)
iz ovog razloga bitno je da inicijalni kapacitet ne bude suvie
veliki, ako su performanse iteracije kroz elemente vane
ICT Akademija 2012

58

Map interfejs implementacije


instanca HashMap klase ima dva parametra koji utiu na performanse:
inicijalni kapacitet i faktor optereenja
faktor optereenja predstavlja mjeru maksimalno dozvoljene
popunjenosti hash tabele prije automatskog poveanja njenog
kapaciteta kada broj elemenata (mapiranja) u hash tabeli postane vei
od proizvoda faktora optereenja i trenutnog kapaciteta, izvrie se
izmjena interne strukture hash tabele, na takav nain da e se njen
kapacitet udvostruiti podrazumijevani faktor optereenja iznosi 0.75 i
predstavlja dobar izbor u veini sluajeva vea vrijednost faktora
optereenja smanjuje gubitak prostora, ali poveava vrijeme izvravanja
veine metoda HashMap klase ako je potrebno dodati veliki broj
mapiranja u objekat klase HashMap, preporuka je da se ovaj objekat
kreira sa dovoljno velikim kapacitetom - ovo e omoguiti efikasnije
dodavanje velikog broja mapiranja, nego u sluaju kada se kapacitet
interne hash tabele automatski poveava
ICT Akademija 2012

59

Map interfejs implementacije

ICT Akademija 2012

60

Map interfejs implementacije


klasa LinkedHashMap nasljeuje klasu HashMap
veza izmeu LinkedHashMap i HashMap klasa analogna je vezi izmeu
LinkedHashSet i HashSet klasa
elementi (mapiranja) HashMap i HashSet objekata su neureeni, a
elementi LinkedHashMap i LinkedHashSet objekata su ureeni
ova implementacija razlikuje se od HashMap implementacije u tom to
odrava dvostruko-ulananu listu svih mapiranja
ovom ulananom listom definie se poredak elemenata
podrazumijevani poredak je poredak u kojem su kljuevi dodavani u ovu
strukturu
poredak se ne mijenja ponovnim dodavanjem istog kljua, jer
mapiranje sa kljuem koji ve postoji u ovoj strukturi nee biti
dodato
elementi se mogu uvati i u poretku nastalom pristupom elementima
ovaj poredak se moe specificirati odgovarajuim konstruktorom
LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
ICT Akademija 2012

61

Map interfejs implementacije


klasa Hashtable implementira Map interfejs
ova klasa implementira neureenu mapu, sinhronizovana je i
ne dozvoljava dodavanje null kljueva i null vrijednosti
instanca Hashtable klase ima dva parametra koji utiu na
performanse: inicijalni kapacitet i faktor optereenja
podrazumijevano 11 i 0.75
podrazumijevani faktor optereenja iznosi 0.75 i obino
predstavlja dobar izbor vea vrijednost faktora
optereenja smanjuje gubitak prostora, ali poveava vrijeme
izvravanja veine metoda Hashtable klase
ako je potrebno dodati veliki broj mapiranja u objekat klase
Hashtable, preporuka je da se ovaj objekat kreira sa
dovoljno velikim kapacitetom ovo e omoguiti efikasnije
dodavanje velikog broja mapiranja, nego u sluaju kada se
kapacitet hash tabele automatski poveava
ICT Akademija 2012

62

Interfejs SortedMap
interfejs SortedMap nasljeuje interfejs Map i
analogan je interfejsu SortedSet
objekti klasa koje implementiraju interfejs
SortedMap obezbjeuju poredak elemenata
(mapiranja) prema prirodnom poretku kljueva ili
prema komparatoru
svi kljuevi sortirane mape moraju implementirati
Comparable interfejs i moraju biti uzajamno
komparabilni, to znai da se pri poreenju bilo koja
dva kljua sortirane mape nee desiti izuzetak
ClassCastException
ICT Akademija 2012

63

Interfejs NavigableMap
interfejs NavigableMap nasljeuje interfejs
SortedMap i analogan je interfejsu NavigableSet
preporuka je da se koristi umjesto SortedMap
interfejsa

ICT Akademija 2012

64

Interfejs NavigableMap - implementacije


klasa TreeMap implementira NavigableMap
interfejs, a samim tim i SortedMap interfejs
rije je o crveno-crnom stablu
mapiranja u ovoj mapi nalaze se u prirodnom
poretku ili u poretku koji definie komparator
koji od ova dva naina e biti primjenjen zavisi
od koritenog konstruktora
ova implementacija garantuje log(n) sloenost
metoda containsKey, get, put i remove
ova klasa nije sinhronizovana
ICT Akademija 2012

65

Klasa Collections
klasa Collections obezbjeuje razliite metoda za rad
sa kolekcijama, poput sortiranja, pretraivanja i
zamjene elemenata u kolekciji
sve metode ove klase su deklarisane kao static i
public
u sluaju kada se kao neki od argumenata neke od
metoda ove klase proslijedi null referenca, umjesto
reference na kolekciju, desie se izuzetak
NullPointerException
veliki broj metoda
u Java verziji 6, ukupno 52 metode ove klase
ICT Akademija 2012

66

Klasa Collections
metode za sortiranje modifikovani merge sort
algoritam

ICT Akademija 2012

67

Klasa Collections
List l moe se sortirati pomou
Collections.sort(l);
ako se ova lista sastoji od String elemenata, bie
sortiran u alfabetskom poretku
ako se ova lista sastoji od Date elemenata, bie
sortiran u hronolokom poretku
i String i Date implementiraju Comparable interfejs,
kao i mnoge druge klase (Integer, Float, Double,
Character, Byte, Boolean,...)
implementacije Comparable interfejsa obezbjeuju
prirodni poredak objekata, to omoguava da objekti
ove klase budu automatski sortirani
ICT Akademija 2012

68

Klasa Collections

ICT Akademija 2012

69

Klasa Collections
pretraivanje kolekcija

ICT Akademija 2012

70

Klasa Collections

ICT Akademija 2012

71

Klasa Collections
zamjena elemenata u kolekcijama

ICT Akademija 2012

72

Klasa Collections
sinhronizacija kolekcija
Collection c = Collections.synchronizedCollection(myCollection);
...
synchronized(c) {
Iterator i = c.iterator();//mora biti u sinhronizovanom bloku
while (i.hasNext())
func(i.next());
}
synchronizedSet
synchronizedSortedSet
synchronizedList
synchronizedMap
synchronizedSortedMap

ICT Akademija 2012

73

Klasa Arrays
klasa Arrays obezbjeuje razliite metoda za rad sa
nizovima, poput sortiranja, pretraivanja i zamjene
elemenata u nizovima
sve metode ove klase su deklarisane kao static i
public
u sluaju kada se kao neki od argumenata neke od
metoda ove klase proslijedi null referenca, umjesto
reference na kolekciju, desie se izuzetak
NullPointerException
veliki broja metoda
u Java verziji 6, ukupno 105 metoda
ICT Akademija 2012

74

Klasa Arrays
sortiranje nizova quick sort algoritam

ICT Akademija 2012

75

Klasa Arrays
pretraivanje nizova

ICT Akademija 2012

76

Poredak objekata
Comparable interfejs
public interface Comparable<T> {
public int compareTo(T o);
}
compareTo metoda poredi primljeni objekat sa tekuim i vraa negativan
integer, 0 ili pozitivan integer, zavisno od toga da li je primljeni objekat manji,
jednak ili vei od tekueg objekta
ako se objekti ne mogu porediti metoda e baciti ClassCastException izuzetak

ICT Akademija 2012

77

Poredak objekata
Comparator interfejs
public interface Comparator<T> {
int compare(T o1, T o2);
}
compare metoda poredi dva argumenta i vraa
negativan integer, 0 ili pozitivan integer, zavisno
od toga da li je prvi objekat manji, jednak ili vei
od drugog objekta
ako bilo koji od argumenata ima neodgovarajui
tip compare metoda baca ClassCastException
ICT Akademija 2012

78

Bitno
za Set interfejs HashSet je najee koriena
implementacija
za List interfejs ArrayList je najee koriena
implementacija
za Map interfejs HashMap je najee koriena
implementacija
za Queue interfejs LinkedList je najee
koriena implementacija
svaka od implementacija obezbjeuje sve
opcione metode iz odgovarajueg interfejsa
ICT Akademija 2012

79

You might also like