Documente Academic
Documente Profesional
Documente Cultură
Tipurile generice reprezinta entitati abstracte, care nu au definit un prototip, dar care pot fi
tratate in interiorul unei clase, pentru ca mai apoi sa fie precizat cu exactitate prototipul la care se
refera. In felul acesta poate fi creat un nou pototip flexibil, ale carui tipuri de atribute sunt
dinamice, putand fi modificate de la o instanta la alta. Sa presupunem urmtorul scenariu:
Clasa Animal defineste instante ce au ca unul dintre atribute chiar instante de animale. Insa
Animal este si cainele si tigrul si pisica. Cum poate fi creata o clasa care sa definesca instante in
care un atibut sa aiba mai intai tipul Caine, apoi Tigru si in cele din urma Pisica;
Clasa Animal defineste un prototip ce are ca atribut un tip generic (abstrct / neprecizat la
definire):
1
In clasa Main sunt definite trei instante diferite de Animal:
In acest fel se spune ca atributul clasei generice este dinamic. Atributul generic poate lua orice
tip, atata timp cat va fi precizat la instantiere:
2
Datorita faptului ca sunt neprecizate ca prototip, tipurile generice nu pot face parte din tipuri
statice. Acestea pot fi tratate in clasa doar ca atribute (tipuri non-statice). De asemenea nu poate
fi instantiata o matrice de tipuri generice:
Tipurile generice pot fi folosite in parametrii metodelor non-statice dar si ca tipuri de return:
3
O clasa poate defini mai multe tipuri generice. Acestea vor fi separate prin virgula:
Un tip generic poate fi definit ca mostenitor al unei alte clase pentru a restrange dinamismul
dat tipului. In felul acesta poate fi creata o restrictie a tipului cu care poate fi instantiat genericul;
De exemplu in situatia de mai jos atributul dat genericului trebuie sa se afle in arborele de
mostenire al clasei JPanel, sub aceasta pentru a putea inlocui tipul abstract:
4
La instantiere:
5
Tipul generic in acest caz poate fi instantiat cu orice clasa ce mosteneste JPanel:
Totusi, spre deosebire de ultimul exemplu (clasa Animal), tipul generic nu mai poate fi dat de
orice clasa:
6
Un tip generic poate fi mostenit la definire. In acest fel poate fi creata o dependinta intre
tipurile generice ale unei clase:
9.3 Colectii
Pachetul java.util ofera un set de interfete si clase numite Java Collections Framework cu
ajutorul carora, instante de diferite tipuri pot fi grupate in entitati numite colectii asupra carora se
pot efectua algoritmi. Cele mai importante interfete si clase din Java Collections Framework sunt:
Interfete:
Collection
List
Set
Queue
SortedSet
NavigableSet
Map
SortedMap
NavigableMap
7
Clase:
HashSet
ArrayList
Vector
LinkedList
TreeSet
Hashtable
HashMap
TreeMap
Clase de algoritmi:
Arrays
Collections
8
Interfata Set defineste o colectie similara unei multimi matematice. Un obiect poate fi adaugat
sau scos din colectie. Colectia nu permite adaugarea elementelor egale (pentru care metoda
equals() returneaza true). De asemenea poate fi verificat faptul ca un element apartine unui Set.
Interfata Map defineste doua tipuri generice K si V. K se numeste key (cheie) si V se numeste
value (valoare). Colectia atribuie unei chei un element ca valoare.
9
Interfata Queue defineste o interfata similara unei structuri de coada. Queue contine metode
care adauga un element la capatul cozii, care preia primul element din coada si il sterge sau care
doar preia primul element din coada. O coada functioneaza standard pe principiul FIFO (First In
First Out).
9.5 List
ArrayList - folosita in principal pentru parcurgeri rapide, aceasta clasa defineste ceva
similar unei matrici care poate creste dinamic.
Vector - una dintre cele mai vechi colectii Java. Este similara cu ArrayList dar metodele
definite de aceasta clasa sunt sincronizate pentru siguranta apelului in fire de executie
separate
LinkedList - Similara unei liste inlantuite. Fiecare element are legatura cu doi vecini. Clasa
poate fi usor folsita pentru implementarea structurilor de coada si stiva.
10
Folosirea clasei Vector:
Clasa LinkedList:
Instantele LinkedList pot fi de asemenea folosite cu o zona de memorie a interfetei List pentru
a restrage metodele la cele ale interfetei. De asemenea clasa poate fi instantiata in propria zona
de memorie ce ofera posibilitatea accesului si la alte metode comportament specifice:
11
Metode din clasa LinkedList:
add(E e);
addFirst(E e);
addLast(E e);
getFirst();
getLast()
removeFirst()
removeLast()
9.6 Set
Interfata Set nu permite duplicate in elementle adaugate colectiei. Pentru instantiere este
folosita una dintre clasele:
HashSet
LinkedHashSet
TreeSet
12
Clasa HashSet foloseste un hash pentru identificarea elementelor. Clasa poate fi folosita pentru
definirea unei colectii care nu ordoneaza elementele si nu permite duplicat in inregistrari.
Se poate observa din exemplu ca elementele nu sunt ordonate cat si ca acestea nu pot fi
adaugate duplicat.
Clasa LinkedHashSet defineste o structura HashSet in care elementele sunt ordonate.
Elementele vor fi afisate in ordinea introducerii.
13
In continuare nu este permisa adaugarea elementelor egale.
Clasa TreeSet descrie o colectie de tip set sortata. O colectie sortata aranjeaza elementele la
introducere dupa un algoritm. TreeSet este un arbore binar echilibrat. Algoritmul dupa care
elementele sunt ordonate este Red-Black Tree.
14
9.7 Map
Collectia de tipul Map identifica printr-o cheie unica valori adaugate. Fiecare element este o
pereche "key-value". Clasele care pot fi folosite pentru a crea o astfel de colectie sunt:
HashMap
Hashtable
LinkedHashMap
TreeMap
HashMap este cea mai simpla colectie de tip Map. Aceasta nu sorteaza si nu ordoneaza
elementele.
Se observa faptul ca elementele nu sunt ordonate dupa adaugare si nici sortate. Cheile pot fi
obinute si parcurse cu un Iterator. Cheia este unica, prin urmare in functie de aceasta poate fi
preluata valoarea.
15
Clasa Hashtable este, similar clasei Vector, una dintre cele mai vechi clasedin Java API. In
prezenta versiune, clasa defineste o tabela de dispersie similar clasei HashMap, dar ofera metode
sincronizate pentru folosirea colectiilor din mai multe fire de executie in desfasurare.
Colectia LinkedHashMap este similara colectiei HashMap, dar ordoneaza elementele dupa
ordinea introducerii:
Clasa Collections din pachetul java.util defineste algoritmi ca metode de clasa ce pot fi folosite
asupra colectiilor.
Sortarea unei liste:
16
Ordonare inversa:
Amestecarea (shuffle):
17
Extragerea minimului sau a maximului:
18
Rotatia elementelor:
Initial:
19
Interschimbarea a doua elemente (swap):
20
Dupa crearea unei instante a unui fir de executie, pentru a porni firul de executie se apeleaza
metoda start(), comportament al instantei firului de executie mostenit de la clasa Thread.
21
Ultimul exemplu, din imaginea de mai sus reprezinta un program cu trei fire de executie. Unul
este firul principal de executie din care sunt pornite alte doua. instructiunile celor trei fire de
executie dupa pornirea fiecaruia se desfasoara simultan, independent unul de celalalt.
Metoda sleep() , definita static in clasa Thread poate fi folosita pentru adormirea firului de
executie timp de un numar de milisecunde. Exista urmatoarele doua supraincarcari ale metodei
sleep():
sleep(int milisecunde)
sleep(int milisecunde, int nanosecunde)
In exemplul de mai jos, firul de executie este adormit 300 milisecunde dupa fiecare iteratie a
ciclului for. Metoda arunca o exceptie de tip InterruptedException, care trebuie tratata pentru
apelul metodei;
Metoda de creare a unui fir de executie prin implementarea interfetei Runnable poate fi utila
atunci cand clasa care trebuie sa devina fir de executie mosteneste deja o alta clasa:
22
Se poate crea instanta Thread pe baza instantei Runnable (fereastra care implementeaza
Runnable), iar apoi firul poate fi pornit cu metoda start().
CuprinsInchidere
23