Clasa AbstractMap
Clasa abstracta java.util.AbstractMap ofera un prototip de implementare
a interfetei Map, pentru a reduce efortul de programare a unor clase de
mapari.
Singura metoda abstracta a clasei AbstractMap (care trebuie deci sa
fie obligatoriu definita de programator) este public Set entrySet(),
care intoarce multimea intrarilor acestei mapari. Restul metodelor sunt
deja definite, dar metoda put nu face altceva, decat sa intoarca
o exceptie din clasa UnsupportedOperationException. Daca este necesar
sa se realizeze o mapare care poate fi modificata, trebuie redefinita metoda
put
a clasei AbstractMap si trebuie sa se adauge metoda remove la
iteratorul acestei clase (cel intors de metoda entrySet.iterator()).
Clasa HashMap
Clasa java.util.HashMap extinde clasa java.util.AbstractMap
si, deci, implementeaza interfata java.util.Map. Instantele clasei
HashMap sunt mapari implementate ca tabele de dispersie. In consecinta,
elementele sunt perechi cheie-valoare, iar plasarea elementelor in tabela
se face folosind codul de dispersie al cheii. Ca la orice
tabela de dispersie, operatiile de baza de cautare dupa cheie si
punere (adaugare) a unui element au complexitate constanta O(1).
Capacitatea tabelei de dispersie este variabila: ea creste automat,
atunci cand factorul de umplere depaseste valoarea limita data implicit
(0.75) sau impusa prin program.
Constructorii acestei clase sunt urmatorii:
public HashMap() - construieste o mapare implementata
ca tabela de dispersie cu capacitate initiala implicita si cu limita factorului
de umplere 0.75.
public HashMap(int initialCapacity) - construieste
o mapare implementata ca tabela de dispersie cu capacitatea initiala data
si cu factorul de umplere limita 0.75.
public HashMap(int initialCapacity, float loadFactor)
- construieste o mapare implementata ca tabela de dispersie cu capacitatea
initiala si factorul de umplere limita date;
public HashMap(Map t) - construieste o noua mapare
implementata ca tabela de dispersie, care contine toate elementele maparii
t. Capacitatea initiala este dubla fata de numarul de elemente
din t, iar factorul de umplere limita este 0.75.
Exemplu
In fisierul TestHashMap.java se da un
exemplu de aplicatie, in care se testeaza clasa HashMap. Pentru comoditate,
s-a considerat ca atat cheia, cat si valoarea fiecarei intrari sunt siruri
de caractere. De obicei cheia este, intr-adevar, un sir dar valoarea poate
fi orice alt obiect. |
Clasa Hashtable
Clasa java.util.Hashtable este o varianta mai veche de mapare implementata
ca tabela de dispersie, introdusa inca in JDK 1.0. Ea implementeaza interfata
Map, dar nu extinde clasa java.util.AbstractMap ci clasa java.util.Dictionary.
Principala deosebire fata de HashMap, este ca clasa HashTable este sincronizata.
Clasa WeakHashMap
Clasa java.util.WeakHashMap are ca instante mapari in care legaturile
cheie-valoare sunt slabe (engleza: weak), in sensul
ca prezenta lor nu protejeaza valoarea respectiva de a fi eliminata de
catre colectorul de reziduuri. Daca unica referinta catre valoare este
cea care vine dinspre o astfel de mapare, colectorul de reziduuri o va
elimina din memorie, iar cheia respectiva din mapare va fi eliminata de
asemenea. Daca se doreste ca valorile maparii sa nu fie eliminate din memorie,
este necesar sa fie protejate prin referinte tari, (engleza:
strong) care sunt continute in variabile sau in campuri ale claselor.
Clasa WeakHashMap poate fi utila, atunci cand se doreste ca maparea
sa contina referinte la obiecte cu existenta temporara, care sa fie eliminate
automat din mapare in momentul in care obiectele respective isi incheie
existenta.
Clasa WeakHashMap extinde clasa java.util.AbstractMap si deci
contine toate metodele acesteia.
© Copyright 2001 - Severin
BUMBARU, Universitatea "Dunarea de Jos" din Galati