Map.remove în Java

Dicționare (Map, HashMap, TreeMap) Java 1.2 (remove(cheie, valoare): Java 8)

Șterge perechea cu cheia dată și returnează valoarea ei (sau null). Varianta cu două argumente șterge doar dacă valoarea se potrivește.

Sintaxă
V remove(Object key)
default boolean remove(Object key, Object value)

Ce face Map.remove

map.remove(cheie) scoate perechea și returnează valoarea pe care o avea cheia, sau null dacă cheia nu exista. Așa poți „lua și șterge” într-un singur pas.

map.remove(cheie, valoare) șterge perechea doar dacă cheia are exact acea valoare și returnează true/false. Este util ca să nu ștergi ceva ce între timp a fost schimbat.

Pentru a șterge mai multe perechi după o condiție, folosește map.entrySet().removeIf(...), map.values().removeIf(...) sau map.keySet().removeIf(...).

Parametri

Parametru Descriere
key Cheia perechii de șters.
value Valoarea pe care trebuie să o aibă cheia ca ștergerea să aibă loc.

Ce returnează

Valoarea ștearsă sau null; la varianta cu două argumente, true dacă s-a șters.

Exemple

Exemplul 1: Anularea unei rezervări

import java.util.Map;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        Map<Integer, String> camere = new TreeMap<>();
        camere.put(101, "Ana");
        camere.put(102, "Radu");
        camere.put(103, "Elena");
        System.out.println("Anulat: " + camere.remove(102));
        System.out.println("Din nou: " + camere.remove(102));
        System.out.println("Ștergere 103 doar dacă e Mihai: " + camere.remove(103, "Mihai"));
        System.out.println("Ștergere 103 doar dacă e Elena: " + camere.remove(103, "Elena"));
        System.out.println(camere);
    }
}

Rezultat

Anulat: Radu
Din nou: null
Ștergere 103 doar dacă e Mihai: false
Ștergere 103 doar dacă e Elena: true
{101=Ana}

Exemplul 2: Ștergerea mai multor perechi după o condiție

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("Ana", 9, "Radu", 4, "Elena", 10, "Mihai", 3));
        note.entrySet().removeIf(e -> e.getValue() < 5);
        System.out.println("Promovați: " + note);
        note.keySet().removeIf(nume -> nume.startsWith("E"));
        System.out.println("Fără cei cu E: " + note);
    }
}

Rezultat

Promovați: {Ana=9, Elena=10}
Fără cei cu E: {Ana=9}

Greșeli frecvente

  • Ștergi cu map.remove(k) în timp ce parcurgi map.keySet() cu for-each. Apare ConcurrentModificationException; folosește removeIf pe vedere.
  • Pe un Map<Integer, ...> crezi că remove(0) înseamnă „primul”. Înseamnă cheia 0.

Comenzi înrudite

  • Map.put: put adaugă o pereche cheie → valoare sau înlocuiește valoarea unei chei existente; putAll copiază toate perechile altui map.
  • Map.size: size() spune câte perechi cheie → valoare are map-ul, isEmpty() dacă e gol, clear() le șterge pe toate.
  • Collection.removeIf: Șterge din colecție toate elementele pentru care condiția dată este adevărată. Returnează true dacă s-a șters ceva.
  • Map.entrySet: entrySet() dă perechile cheie-valoare ale unui map, ca obiecte Map.Entry; Map.entry(k, v) creează o astfel de pereche.
  • Map.replace: replace schimbă valoarea unei chei doar dacă cheia există; replaceAll recalculează toate valorile cu o funcție.