TreeMap.ceilingKey în Java

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ă.

Sintaxă
K ceilingKey(K key)   // cea mai mică cheie >= key
K floorKey(K key)     // cea mai mare cheie <= key

Map.Entry<K, V> ceilingEntry(K key)
Map.Entry<K, V> floorEntry(K key)

Ce face TreeMap.ceilingKey

Aceste metode caută cheia cea mai apropiată de o valoare dată, fără ca valoarea să existe în map. floorKey(x) este foarte util pentru tabele de praguri: tarife pe kilograme, calificative pe punctaje, impozite pe tranșe.

Variantele ceilingEntry și floorEntry returnează direct perechea (cheie și valoare). Toate returnează null când nu există o astfel de cheie. Variantele stricte sunt higherKey (>) și lowerKey (<).

Parametri

Parametru Descriere
key Valoarea de referință.

Ce returnează

Cheia (sau perechea) găsită ori null.

Exemple

Exemplul 1: Calificativul după punctaj (floorEntry)

Pragurile sunt chei; pentru un punctaj luăm pragul cel mai mare care nu îl depășește.

import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        TreeMap<Integer, String> praguri = new TreeMap<>();
        praguri.put(0, "Insuficient");
        praguri.put(50, "Suficient");
        praguri.put(70, "Bine");
        praguri.put(90, "Foarte bine");
        for (int punctaj : new int[] {35, 50, 84, 97}) {
            System.out.println(punctaj + " puncte: " + praguri.floorEntry(punctaj).getValue()
                    + " (prag " + praguri.floorKey(punctaj) + ")");
        }
    }
}

Rezultat

35 puncte: Insuficient (prag 0)
50 puncte: Suficient (prag 50)
84 puncte: Bine (prag 70)
97 puncte: Foarte bine (prag 90)

Exemplul 2: Coletul încape în ce cutie?

import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        TreeMap<Integer, Integer> cutii = new TreeMap<>();   // kg maxim -> preț în lei
        cutii.put(2, 15);
        cutii.put(5, 22);
        cutii.put(10, 35);
        for (int kg : new int[] {1, 5, 7, 12}) {
            Integer cutie = cutii.ceilingKey(kg);
            if (cutie == null) {
                System.out.println(kg + " kg: prea greu, nu avem cutie");
            } else {
                System.out.println(kg + " kg: cutia de " + cutie + " kg, " + cutii.get(cutie) + " lei");
            }
        }
    }
}

Rezultat

1 kg: cutia de 2 kg, 15 lei
5 kg: cutia de 5 kg, 22 lei
7 kg: cutia de 10 kg, 35 lei
12 kg: prea greu, nu avem cutie

Greșeli frecvente

  • Nu verifici null: pentru o valoare mai mică decât prima cheie, floorKey returnează null.
  • Folosești get(x) pentru praguri. get caută doar cheia exactă; pentru „cel mai apropiat prag” folosește floorEntry.

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.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.firstKey: firstKey() returnează cea mai mică cheie dintr-un TreeMap, lastKey() pe cea mai mare. Pe un map gol aruncă excepție.
  • TreeMap.headMap: headMap(x) dă partea unui TreeMap cu cheile mai mici decât x; tailMap(x) partea cu cheile mai mari sau egale.