
Clasa AbstractMap
Clasa abstractă java.util.AbstractMap oferă un prototip de implementare
a interfeței Map, pentru a reduce efortul de programare a unor clase de
mapări.
Singura metodă abstractă a clasei AbstractMap (care trebuie, deci,
să fie obligatoriu definită de programator) este public Set
entrySet(), care întoarce mulțimea intrărilor acestei mapări.
Restul metodelor sunt deja definite, dar metoda put nu face
altceva, decât să intoarcă o excepție din clasa
UnsupportedOperationException. Dacă este necesar să se realizeze o
mapare care poate fi modificată prin adăugarea de noi elemente, trebuie
redefinită metoda put a clasei AbstractMap și trebuie să se
adauge metoda remove la iteratorul acestei clase (cel întors
de metoda entrySet.iterator()).
Clasa HashMap
Clasa java.util.HashMap extinde clasa java.util.AbstractMap
și, deci, implementează interfața java.util.Map. Instanțele
clasei HashMap sunt mapări implementate ca tabele de dispersie. In
consecință, elementele sunt perechi cheie-valoare, iar plasarea
elementelor în tabelă se face folosind codul de dispersie al
cheii. Ca la orice tabelă de dispersie, operațiile de bază de
căutare după cheie și punere (adăugare) a unui element au
complexitatea constantă O(1).
Capacitatea tabelei de dispersie din clasa HashMap este variabilă:
ea crește automat, atunci când factorul de umplere depășește valoarea
limită dată implicit (0.75) sau impusă prin program.
Constructorii acestei clase sunt următorii:
public HashMap() - construiește o mapare implementată
ca tabela de dispersie cu capacitate inițială implicită și cu limita
factorului de umplere 0.75.
public HashMap(int initialCapacity) - construiește o
mapare implementată ca tabelă de dispersie cu capacitatea inițială dată
și cu factorul de umplere limită 0.75.
public HashMap(int initialCapacity, float loadFactor)
- construiește o mapare implementată ca tabelă de dispersie cu
capacitatea inițială și factorul de umplere limită date;
public HashMap(Map t) - construiește o noua mapare,
implementată ca tabelă de dispersie, care conține toate elementele
mapării t. Capacitatea inițială este dublă fața de numărul de
elemente din t, iar factorul de umplere limită este 0.75.
Exemplu
In fișierul TestHashMap.java se dă un
exemplu de aplicație, în care se testează clasa HashMap. Pentru
comoditate, s-a considerat că atât cheia, cât și valoarea fiecărei
intrări sunt șiruri de caractere. De obicei, cheia este într-adevăr un
șir, dar valoarea poate fi orice alt obiect.
|
Clasa Hashtable
Clasa java.util.Hashtable este o variantă mai veche de mapare
implementată ca tabelă de dispersie, introdusă încă în JDK 1.0. Ea
implementează interfața Map, dar nu extinde clasa java.util.AbstractMap
ci clasa java.util.Dictionary. Principala deosebire față de
HashMap, este că clasa HashTable este sincronizată.
Clasa WeakHashMap
Clasa java.util.WeakHashMap are ca instanțe mapări în care
legăturile cheie-valoare sunt slabe (engleză: weak),
în sensul că prezența lor nu protejează valoarea respectivă de a fi
eliminată de către colectorul de reziduuri. Daca unica referință către
valoare este cea care vine dinspre o astfel de mapare, colectorul de
reziduuri o va elimina din memorie, iar intrarea respectivă din mapare
va fi eliminată de asemenea. Dacă se dorește ca valorile mapării sa nu
fie eliminate din memorie, este necesar sa fie protejate prin referințe tari,
(engleză: strong) care sunt conținute în variabile sau în
câmpuri ale altor clase decât WeakHashMap.
Clasa WeakHashMap poate fi utilă, atunci când se dorește ca maparea
să conțină referințe la obiecte cu existență temporară, care sa fie
eliminate automat din mapare în momentul în care obiectele respective
își încheie existența.
Clasa WeakHashMap extinde clasa java.util.AbstractMap și,
deci, conține toate metodele acesteia.
© Copyright 2001 - Severin
BUMBARU, Universitatea "Dunărea de Jos" din Galați
