Ce face Map.keySet
keySet() returnează un Set cu toate cheile, iar values() o Collection cu toate valorile (care se pot repeta). Ordinea lor este ordinea map-ului: sortată la TreeMap, a adăugării la LinkedHashMap, nespecificată la HashMap.
Amândouă sunt vederi: dacă map-ul se schimbă, vederea se schimbă și ea, iar dacă ștergi din vedere (remove, removeIf, retainAll), se șterg perechile din map. Nu poți adăuga prin vederi.
Când ai nevoie atât de chei, cât și de valori, nu parcurge keySet() apelând get pentru fiecare cheie: entrySet() sau forEach sunt mai directe.
Ce returnează
O vedere Set<K> sau Collection<V>.
Exemple
Exemplul 1: Elevii și suma notelor
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
Map<String, Integer> note = new TreeMap<>(Map.of("Radu", 8, "Ana", 10, "Elena", 9));
System.out.println("Elevi: " + note.keySet());
System.out.println("Note: " + note.values());
int suma = 0;
for (int n : note.values()) {
suma += n;
}
System.out.println("Media: " + (double) suma / note.size());
}
}
Rezultat
Elevi: [Ana, Elena, Radu]
Note: [10, 9, 8]
Media: 9.0
Exemplul 2: Ștergere prin vedere
retainAll pe keySet() păstrează în map doar elevii din lista prezenților.
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
Map<String, Integer> note = new TreeMap<>(Map.of("Radu", 8, "Ana", 10, "Elena", 9, "Mihai", 6));
note.keySet().retainAll(List.of("Ana", "Mihai"));
System.out.println(note);
note.values().remove(6);
System.out.println(note);
}
}
Rezultat
{Ana=10, Mihai=6}
{Ana=10}
Greșeli frecvente
- Încerci
map.keySet().add("x"). Vederile nu permit adăugarea; apareUnsupportedOperationException. - Crezi că
values()nu are duplicate. Este oCollection, nu unSet; valorile egale apar de mai multe ori.
Comenzi înrudite
Map.entrySet: entrySet() dă perechile cheie-valoare ale unui map, ca obiecte Map.Entry; Map.entry(k, v) creează o astfel de pereche.Map.forEach: Parcurge toate perechile unui map și apelează o funcție cu cheia și valoarea fiecăreia: map.forEach((k, v) -> …).Set: Interfața pentru mulțimi: colecții fără duplicate, în care întrebi rapid dacă un element există.Collection: Interfața de bază pentru liste, mulțimi și cozi: metodele comune add, remove, contains, size și parcurgerea cu for-each.Map.remove: Șterge perechea cu cheia dată și returnează valoarea ei (sau null). Varianta cu două argumente șterge doar dacă valoarea se potrivește.