Interfața Map și clasa HashMap
Interfața Map<K, V> reprezintă o colecție de perechi „cheie-valoare”, unde fiecare cheie este unică. Aceste colecții facilitează căutarea unui element atunci când avem cheia, care acționează ca un identificator unic al obiectului. Spre deosebire de alte interfețe care reprezintă colecții, Map nu extinde interfața Collection.
Printre metodele importante ale interfeței Map se numără:
- void clear(): curăță colecția
- boolean containsKey(Object k): returnează true dacă colecția conține cheia k
- boolean containsValue(Object v): returnează true dacă colecția conține valoarea v
- Set<Map.Entry<K, V>> entrySet(): returnează un set de elemente ale colecției sub formă de obiecte Map.Entry
- boolean equals(Object obj): returnează true dacă colecția este identică cu colecția dată ca parametru
- boolean isEmpty(): returnează true dacă colecția este goală
- V get(Object k): returnează valoarea corespunzătoare cheii k. Dacă cheia nu există, returnează null
- V getOrDefault(Object k, V defaultValue): returnează valoarea pentru cheia k, iar dacă aceasta nu există, returnează defaultValue
- V put(K k, V v): adaugă un element cu cheia k și valoarea v în colecție. Dacă cheia există deja, valoarea este suprascrisă
- V putIfAbsent(K k, V v): adaugă un element doar dacă cheia k nu există deja în colecție
- Set<K> keySet(): returnează un set de chei
- Collection<V> values(): returnează o colecție cu toate valorile
- void putAll(Map<? extends K, ? extends V> map): adaugă toate obiectele din colecția map
- V remove(Object k): elimină obiectul cu cheia k
- int size(): returnează numărul de elemente din colecție
Pentru a adăuga un element în colecție, folosim metoda put, iar pentru a obține valoarea corespunzătoare unei chei, folosim get. Interfața Map permite, de asemenea, obținerea seturilor de chei și valori, iar metoda entrySet() returnează toate perechile de elemente sub formă de obiecte Map.Entry<K, V>.
Interfața Map.Entry<K, V> reprezintă o pereche „cheie-valoare” și oferă următoarele metode:
- K getKey(): returnează cheia perechii
- V getValue(): returnează valoarea perechii
- V setValue(V v): setează o nouă valoare pentru pereche
- int hashCode(): returnează codul hash al obiectului
- boolean equals(Object obj): compară două obiecte Map.Entry
Clasa HashMap
Clasa HashMap este cea mai comună implementare a interfeței Map și moștenește clasa AbstractMap, care implementează majoritatea metodelor interfeței Map.
Exemplu de utilizare a clasei HashMap:
import java.util.*;
public class Program{
public static void main(String[] args) {
Map<Integer, String> states = new HashMap<Integer, String>();
states.put(1, "Germany");
states.put(2, "Spain");
states.put(4, "France");
states.put(3, "Italy");
// Obținem un obiect pe baza cheii 2
String first = states.get(2);
System.out.println(first);
// Obținem setul de chei
Set<Integer> keys = states.keySet();
// Obținem toate valorile
Collection<String> values = states.values();
// Înlocuim un element
states.replace(1, "Poland");
// Eliminăm un element pe baza cheii 2
states.remove(2);
// Parcurgem elementele
for (Map.Entry<Integer, String> item : states.entrySet()) {
System.out.printf("Key: %d Value: %s \n", item.getKey(), item.getValue());
}
// HashMap cu obiecte Person
Map<String, Person> people = new HashMap<String, Person>();
people.put("1240i54", new Person("Tom"));
people.put("1564i55", new Person("Bill"));
people.put("4540i56", new Person("Nick"));
for (Map.Entry<String, Person> item : people.entrySet()) {
System.out.printf("Key: %s Value: %s \n", item.getKey(), item.getValue().getName());
}
}
}
class Person {
private String name;
public Person(String value) {
name = value;
}
String getName() {
return name;
}
}
În acest exemplu, pentru a adăuga sau înlocui un element folosim metoda put sau replace, iar pentru a obține valoarea corespunzătoare unei chei folosim metoda get.
Alte metode ale interfeței Map sunt utilizate pentru diverse operațiuni: parcurgerea colecției, obținerea cheilor și valorilor, ștergerea elementelor.
Această implementare HashMap este eficientă pentru operațiuni de căutare, adăugare și ștergere, deoarece folosește o structură de date hash pentru a stoca perechile „cheie-valoare”.