- Figura 1 -
In figura 1 este reprezentata o mapare, in care K1, K2, K3, K4 sunt chei, iar V1, V2, V3 sunt valori. Fiecare pereche de obiecte (Ki, Vi) unite prin sageata este o intrare a maparii (un element al acesteia).
Maparile sunt frecvent folosite atunci cand cautarea valorii trebuie facuta dupa cheie. Un exemplu frecvent intalnit este dictionarul, in care cheia este un cuvant, iar valoarea este un text explicativ. Un alt exemplu frecvent intalnit in informatica sunt fisierele de date, in care cautarea articolelor se face dupa cheie. Exista si alte structuri de date care se incadreaza in conceptul de mapare, dintre care unele vor fi studiate in sectiunile urmatoare.
Interfata Map este utilizata la crearea claselor de mapari. Desi
maparea este, la nivel conceptual, o multime de perechi cheie-valoare,
interfata Map nu extinde interfata Set. Aceasta solutie s-a
adoptat deoarece in interfata Set (si in superinterfata sa Collection)
exista unele metode care nu sunt potrivite pentru o mapare. Atat cheia,
cat si valoarea intrarii in mapare sunt obiecte (adica instante
ale unor clase Java).
Metodele interfetei Map prin care se realizeaza operatiile
de baza asupra maparii sunt:
public boolean isEmpty() - testeaza daca maparea este vida; public int size() - intoarce numarul de chei (de perechi cheie-valoare) existente in mapare; public Object put(Object key, Object value) - introduce in mapare o noua intrare (o pereche cheie-valoare). Daca cheia key deja exista, se inlocuieste valoarea existenta la cheia respectiva cu valoarea noua si se intoarce valoarea veche. Daca cheia nu exista deja, se introduce noua pereche cheie-valoare si se intoarce null. public Object get(Object key) - intoarce valoarea asociata cheii date ca argument; public Object remove(Object key) - elimina din mapare intrarea cu cheia key si intoarce valoarea asociate acestei chei; daca cheia key nu exista, intoarce null. public boolean containsKey(Object key) - testeaza daca cheia data exista in mapare; public boolean containsValue(Object value) - testeaza daca valoarea data exista in mapare; public void putAll(Map t) - pune in aceasta mapare toate intrarile existente in maparea t. Daca o cheie din t exista deja in aceasta mapare, se inlocuieste valoarea veche cu cea din t; public void clear() - se elimina toate intrarile maparii. |
Interfata Map ofera utilizatorilor trei vederi asupra
maparii, adica posibilitatea de a privi aceeasi mapare sub trei aspecte
(din trei puncte de vedere) diferite: ca o multime de chei,
ca o colectie de valori sau ca o multime de perechi
cheie-valoare. Parcurgerea elementelor maparii poate fi, deci, facuta
dupa oricare din aceste trei vederi, folosind iteratorii respectivi (de
multime sau de colectie).
Aceste vederi pot fi obtiute prin urmatoarele metode:
public Set keySet() - intoarce multimea cheilor existente in mapare; public Collection values() - intoarce colectia valorilor existente in mapare; public Set entrySet() - intoarce multimea intrarilor maparii, adica multimea perechilor cheie-valoare. |
Intrarile unei mapari care respecta interfata Map trebuie sa respecte,
la randul lor interfata interioara Map.Entry.
Metodele interfetei Map.Entry sunt urmatoarele:
public Object getKey() - intoarce cheia intrarii respective; public Object getValue() - intoarce valoarea continuta in aceasta intrare; public Object setValue(Object value) - inlocuieste valoarea veche cu cea primita ca argument si intoarce valoarea veche; public boolean equals(Object o) - compara aceasta cheie cu obiectul o (se redefineste deci obligatoriu metoda equals din clasa Object); public int hashCode() - intoarce codul de dispersie al acestei intrari, calculat cu expresia (e.getKey()==null ? 0 : e.getKey().hashCode()) ^ (e.getValue()==null ? 0 : e.getValue().hashCode()) unde operatorul ^ este "sau exclusiv pe biti". In acest fel, doua intrari identice au acelasi cod de dispersie. |