Интерфейс java.util.Map рассчитан на получение значения по ключу и вставку связи значения с ключом. У него есть наследник java.util.SortedMap, который используется специально для упорядоченных значений, у которого в свою очередь есть наследник java.util.NavigableMap. В этой статье мы поговорим именно о нём, а точнее о его методах lowerEntry, floorEntry, ceilingEntry, и higherEntry. Эти методы используются для получения связки ключ-значение, которая в соответствии с порядком сортировки меньше, меньше или равна, больше или равна, или строго больше, чем переданное значение ключа. Причём берётся ближайшее значение, удовлетворяющее этому условию.
Приведу пример, чтобы было лучше запомнить:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.util.NavigableMap; import java.util.TreeMap; public class Main { public static void main(String[] args) { NavigableMap<Integer, String> map = new TreeMap<>(); map.put(1, "Vasya"); map.put(5, "Petya"); map.put(10, "Maria"); map.put(15, "Stark"); System.out.println("lower(5)=" + map.lowerEntry(5).getValue()); // Vasya System.out.println("floor(5)=" + map.floorEntry(5).getValue()); // Petya System.out.println("floor(4)=" + map.floorEntry(4).getValue()); // Vasya System.out.println("ceiling(5)=" + map.ceilingEntry(5).getValue()); // Petya System.out.println("ceiling(6)=" + map.ceilingEntry(6).getValue()); // Maria System.out.println("higher(5)=" + map.higherEntry(5).getValue()); // Maria } } |
Так же есть аналогичные методы для получения ключей, а не экземпляров Entry: lowerKey, floorKey, ceilingKey, higherKey.
Мне, честно говоря, ни один из этих методов ещё ни разу в жизни не пригодился, но это вполне могут спросить на собеседованиях, да и знать о существовании подобных готовых методов не помешает.