TreeSet.headSet în Java

Mulțimi (Set, HashSet, TreeSet) Java 1.2 (varianta cu inclusive: Java 6)

headSet(x) returnează partea unui TreeSet cu elementele mai mici decât x, ca vedere legată de mulțimea originală.

Sintaxă
SortedSet<E> headSet(E toElement)                         // < toElement
NavigableSet<E> headSet(E toElement, boolean inclusive)
NavigableSet<E> tailSet(E fromElement, boolean inclusive)
NavigableSet<E> subSet(E from, boolean fi, E to, boolean ti)

Ce face TreeSet.headSet

headSet(x) dă toate elementele strict mai mici decât x. Cu al doilea argument true, include și x (dacă există). Perechea lui este tailSet(x), care dă elementele mai mari sau egale, iar subSet dă un interval.

Rezultatul nu este o copie, ci o vedere (view) a mulțimii originale: dacă adaugi în original un element din interval, apare și în vedere; dacă ștergi din vedere, dispare și din original. Pentru o copie independentă scrie new TreeSet<>(set.headSet(x)).

Parametri

Parametru Descriere
toElement Limita de sus (exclusă, dacă nu dai inclusive = true).
inclusive true ca limita să fie inclusă.

Ce returnează

O vedere sortată peste elementele din interval.

Exemple

Exemplul 1: Note sub și peste 5

import java.util.List;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        TreeSet<Integer> note = new TreeSet<>(List.of(3, 4, 5, 7, 8, 10));
        System.out.println("Sub 5: " + note.headSet(5));
        System.out.println("Până la 5 inclusiv: " + note.headSet(5, true));
        System.out.println("De la 5 în sus: " + note.tailSet(5, true));
        System.out.println("Între 4 și 8: " + note.subSet(4, true, 8, true));
    }
}

Rezultat

Sub 5: [3, 4]
Până la 5 inclusiv: [3, 4, 5]
De la 5 în sus: [5, 7, 8, 10]
Între 4 și 8: [4, 5, 7, 8]

Exemplul 2: Vederea este legată de mulțimea originală

Elementul 2 adăugat în original apare în vedere; clear() pe vedere șterge din original toate elementele sub 5.

import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        TreeSet<Integer> note = new TreeSet<>(List.of(3, 4, 7, 9));
        SortedSet<Integer> picati = note.headSet(5);
        note.add(2);
        System.out.println("Vedere: " + picati);
        picati.clear();
        System.out.println("Original după clear pe vedere: " + note);
    }
}

Rezultat

Vedere: [2, 3, 4]
Original după clear pe vedere: [7, 9]

Greșeli frecvente

  • Te aștepți ca headSet(5) să includă 5. Varianta cu un argument exclude limita; folosește headSet(5, true).
  • Adaugi în vedere un element din afara intervalului (picati.add(8)). Apare IllegalArgumentException.

Comenzi înrudite

  • TreeSet: Mulțime care ține elementele mereu sortate (crescător sau după un Comparator) și oferă căutări de tip „cel mai mic”, „cel mai apropiat”.
  • TreeSet.ceiling: ceiling(x) găsește cel mai mic element mai mare sau egal cu x; floor(x) cel mai mare element mai mic sau egal cu x.
  • TreeMap.headMap: headMap(x) dă partea unui TreeMap cu cheile mai mici decât x; tailMap(x) partea cu cheile mai mari sau egale.
  • List.subList: Returnează o vedere a unei porțiuni din listă, de la fromIndex inclusiv la toIndex exclusiv.