TreeMap.headMap în Java

Dicționare (Map, HashMap, TreeMap) Java 1.2 (varianta cu inclusive: Java 6)

headMap(x) dă partea unui TreeMap cu cheile mai mici decât x; tailMap(x) partea cu cheile mai mari sau egale.

Sintaxă
SortedMap<K, V> headMap(K toKey)                       // chei < toKey
NavigableMap<K, V> headMap(K toKey, boolean inclusive)
SortedMap<K, V> tailMap(K fromKey)                     // chei >= fromKey
NavigableMap<K, V> tailMap(K fromKey, boolean inclusive)

Ce face TreeMap.headMap

headMap(x) returnează perechile cu cheie strict mai mică decât x; tailMap(x) pe cele cu cheie mai mare sau egală. Cu al doilea argument alegi dacă limita este inclusă. Pentru un interval între două chei există subMap.

Rezultatul este o vedere a map-ului original, nu o copie: modificările se văd în ambele sensuri. Pentru o copie independentă, scrie new TreeMap<>(map.headMap(x)).

Parametri

Parametru Descriere
toKey / fromKey Cheia limită (nu trebuie să existe în map).
inclusive true ca limita să fie inclusă.

Ce returnează

O vedere sortată peste o parte din map.

Exemple

Exemplul 1: Comenzi înainte și după o dată

import java.time.LocalDate;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        TreeMap<LocalDate, String> comenzi = new TreeMap<>();
        comenzi.put(LocalDate.of(2026, 9, 2), "#101 Ana");
        comenzi.put(LocalDate.of(2026, 9, 15), "#102 Radu");
        comenzi.put(LocalDate.of(2026, 10, 1), "#103 Elena");
        comenzi.put(LocalDate.of(2026, 10, 12), "#104 Mihai");

        LocalDate prag = LocalDate.of(2026, 10, 1);
        System.out.println("Înainte: " + comenzi.headMap(prag));
        System.out.println("De la prag: " + comenzi.tailMap(prag));
        System.out.println("Până la prag inclusiv: " + comenzi.headMap(prag, true).size() + " comenzi");
    }
}

Rezultat

Înainte: {2026-09-02=#101 Ana, 2026-09-15=#102 Radu}
De la prag: {2026-10-01=#103 Elena, 2026-10-12=#104 Mihai}
Până la prag inclusiv: 3 comenzi

Exemplul 2: Ștergerea înregistrărilor vechi prin vedere

clear() pe vederea headMap șterge din map-ul original toate cheile mai mici decât 2025.

import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        TreeMap<Integer, Integer> absolventi = new TreeMap<>();
        absolventi.put(2022, 110);
        absolventi.put(2023, 124);
        absolventi.put(2024, 131);
        absolventi.put(2025, 128);
        absolventi.put(2026, 140);
        absolventi.headMap(2025).clear();
        System.out.println(absolventi);
        System.out.println("Ultimii doi ani: " + absolventi.tailMap(2025, false));
    }
}

Rezultat

{2025=128, 2026=140}
Ultimii doi ani: {2026=140}

Greșeli frecvente

  • Te aștepți ca headMap(x) să includă cheia x. Varianta cu un argument o exclude; tailMap(x) o include.
  • Ștergi din vedere crezând că lucrezi pe o copie. Se șterge și din original.

Comenzi înrudite

  • TreeMap: Dicționar care ține cheile mereu sortate și oferă căutări de tip „prima cheie”, „cea mai apropiată cheie”, „intervalul de chei”.
  • TreeSet.headSet: headSet(x) returnează partea unui TreeSet cu elementele mai mici decât x, ca vedere legată de mulțimea originală.
  • TreeMap.ceilingKey: ceilingKey(x) găsește cea mai mică cheie mai mare sau egală cu x, floorKey(x) cea mai mare cheie mai mică sau egală.
  • List.subList: Returnează o vedere a unei porțiuni din listă, de la fromIndex inclusiv la toIndex exclusiv.