Map.containsKey în Java

containsKey verifică rapid dacă o cheie există în map; containsValue caută o valoare, mai lent, printre toate perechile.

Sintaxă
boolean containsKey(Object key)
boolean containsValue(Object value)

Ce face Map.containsKey

containsKey(cheie) returnează true dacă cheia are o pereche în map. Este la fel de rapidă ca get (aproape constantă la HashMap, logaritmică la TreeMap).

containsValue(valoare) caută printre valori. Map-urile nu sunt organizate după valori, așa că trebuie să le verifice pe toate, una câte una: e lentă pentru map-uri mari. Dacă o folosești des, păstrează și un map invers (valoare → cheie).

Parametri

Parametru Descriere
key Cheia căutată.
value Valoarea căutată (comparată cu equals).

Ce returnează

true sau false.

Exemple

Exemplul 1: Utilizator existent și email folosit

import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, String> conturi = Map.of(
                "ana92", "ana@exemplu.ro",
                "radu_m", "radu@exemplu.ro");
        System.out.println("Există ana92? " + conturi.containsKey("ana92"));
        System.out.println("Există elena? " + conturi.containsKey("elena"));
        System.out.println("Email radu@exemplu.ro folosit? " + conturi.containsValue("radu@exemplu.ro"));
    }
}

Rezultat

Există ana92? true
Există elena? false
Email radu@exemplu.ro folosit? true

Exemplul 2: containsKey diferă de get(…) != null

Un HashMap poate ține valoarea null: cheia există, dar get returnează tot null.

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, String> telefon = new HashMap<>();
        telefon.put("Ana", "0722 111 222");
        telefon.put("Radu", null);   // știm că nu are telefon
        for (String nume : new String[] {"Ana", "Radu", "Elena"}) {
            System.out.println(nume + ": containsKey=" + telefon.containsKey(nume) + ", get=" + telefon.get(nume));
        }
    }
}

Rezultat

Ana: containsKey=true, get=0722 111 222
Radu: containsKey=true, get=null
Elena: containsKey=false, get=null

Greșeli frecvente

  • Scrii if (map.containsKey(k)) { v = map.get(k); } peste tot. Merge, dar caută de două ori; getOrDefault sau un singur get cu verificare de null e suficient când nu ai valori null.
  • Folosești containsValue într-o buclă pe un map mare. Fiecare apel parcurge tot map-ul.

Comenzi înrudite

  • Map.get: get returnează valoarea unei chei sau null dacă lipsește; getOrDefault returnează o valoare de rezervă în loc de null.
  • Set.contains: contains verifică rapid dacă un element este în mulțime; containsAll verifică dacă sunt toate elementele altei colecții.
  • Map.putIfAbsent: Pune valoarea doar dacă cheia lipsește (sau are null). Nu suprascrie o valoare existentă; returnează valoarea care era deja.
  • Map.keySet: keySet() dă mulțimea cheilor unui map, values() colecția valorilor. Sunt vederi legate de map, nu copii.