TreeSet.ceiling în Java

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.

Sintaxă
E ceiling(E e)   // cel mai mic element >= e
E floor(E e)     // cel mai mare element <= e
E higher(E e)    // > e
E lower(E e)     // < e

Ce face TreeSet.ceiling

Aceste metode caută cel mai apropiat element dintr-un TreeSet: ceiling(x) („tavan”) dă cel mai mic element ≥ x, iar floor(x) („podea”) dă cel mai mare element ≤ x. Dacă x există în mulțime, ambele îl returnează chiar pe el.

Variantele stricte higher(x) (>) și lower(x) (<) sar peste x. Toate returnează null când nu există un astfel de element, deci rezultatul se pune într-o variabilă de tip obiect (Integer, nu int).

Sunt utile pentru întrebări ca „următoarea plecare după ora 10”, „tariful pentru 7 kg dacă am tarife la 5 și 10 kg” sau „cel mai apropiat număr disponibil”.

Parametri

Parametru Descriere
e Valoarea de referință (nu trebuie să existe în mulțime).

Ce returnează

Elementul găsit sau null.

Exemple

Exemplul 1: Următorul tren și cel anterior

import java.time.LocalTime;
import java.util.List;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        TreeSet<LocalTime> plecari = new TreeSet<>(List.of(
                LocalTime.of(6, 40), LocalTime.of(9, 15), LocalTime.of(13, 0), LocalTime.of(18, 30)));
        LocalTime acum = LocalTime.of(10, 5);
        System.out.println("Următorul tren: " + plecari.ceiling(acum));
        System.out.println("A plecat deja: " + plecari.floor(acum));
        System.out.println("După 18:30: " + plecari.higher(LocalTime.of(18, 30)));
        System.out.println("Exact 13:00: " + plecari.ceiling(LocalTime.of(13, 0)));
    }
}

Rezultat

Următorul tren: 13:00
A plecat deja: 09:15
După 18:30: null
Exact 13:00: 13:00

Exemplul 2: Mărimea de pantof cea mai apropiată din stoc

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

public class Main {
    public static void main(String[] args) {
        TreeSet<Integer> stoc = new TreeSet<>(List.of(36, 38, 41, 43));
        for (int cerut : new int[] {38, 39, 44, 35}) {
            Integer mare = stoc.ceiling(cerut);
            Integer mic = stoc.floor(cerut);
            System.out.println("Cerut " + cerut + ": în sus " + mare + ", în jos " + mic);
        }
    }
}

Rezultat

Cerut 38: în sus 38, în jos 38
Cerut 39: în sus 41, în jos 38
Cerut 44: în sus null, în jos 43
Cerut 35: în sus 36, în jos null

Greșeli frecvente

  • Pui rezultatul direct într-un int: int x = set.ceiling(44);. Dacă rezultatul este null, apare NullPointerException la conversie.
  • Confunzi ceiling cu higher: ceiling returnează și valoarea egală, higher doar una strict mai mare.

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.first: first() returnează cel mai mic element al unui TreeSet, last() pe cel mai mare. Aruncă excepție dacă mulțimea e goală.
  • 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ă.
  • Arrays.binarySearch: Caută rapid o valoare într-un array sortat. Returnează poziția sau un număr negativ care arată unde ar trebui inserată.