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