Java NavigableMap

Интерфейс Java NavigableMap, java.util.NavigableMap, является подчиненным интерфейсом SortedMap. Имеет несколько расширений SortedSet, которые позволяют перемещаться по ключам и значениям, хранящимся на карте.

Реализации

Будучи интерфейсом, вам нужна реализация NavigableMap, прежде чем вы сможете его использовать. Пакет java.util имеет только одну реализацию — класс java.util.TreeMap. В пакете java.util.concurrent также есть реализация, но она выходит за рамки данного руководства.

Как создать

Чтобы создать, вы должны создать экземпляр одного из классов, который реализует интерфейс NavigableMap:

NavigableMap navigableMap = new TreeMap();

Как создать с компаратором

Можно передать реализацию Comparator конструктору TreeMap. Этот компаратор будет затем использоваться для сортировки ключей ключа, пары значений, хранящиеся в NavigableMap. Вот пример:

Comparator comparator = new MyComparatorImpl();

SortedMap sortedMap = new TreeMap(comparator);

descendingKeySet()

Метод возвращает NavigableSet, в котором порядок элементов обращен по сравнению с исходным набором ключей. Возвращенный «вид» поддерживается исходным набором ключей, поэтому изменения в наборе ключей по убыванию также отражаются в исходном наборе.

Вот простой пример:

NavigableSet reverse = map.descendingKeySet();

downndingMap()

Метод возвращает NavigableMap, который является видом исходной карты. Порядок элементов обратный порядку исходной карты. Будучи видом исходной карты, любые изменения этого вида также отражаются на ней.

Вот простой пример:

NavigableMap descending = map.descendingMap();

headMap()

Метод возвращает представление исходного NavigableMap, который содержит только элементы, которые «меньше» данного элемента:

NavigableMap original = new TreeMap();
original.put("1", "1");
original.put("2", "2");
original.put("3", "3");

//this headmap1 will contain "1" and "2"
SortedMap headmap1 = original.headMap("3");

//this headmap2 will contain "1", "2", and "3" because "inclusive"=true
NavigableMap headmap2 = original.headMap("3", true);

tailMap()

Метод аналогичен методу headMap(), за исключением того, что возвращает все элементы, которые равны или превышают данный элемент параметра:

NavigableMap navigableMap = new TreeMap();

navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");

SortedMap tailMap = navigableMap.tailMap("c");

Переменная tailMap будет ссылаться на SortedMap, содержащий все пары ключ + значение из NavigableMap для ключей «c», «d» и «e», поскольку эти ключи считаются равными или большими, чем значение параметра «c», переданное в Метод tailMap().

subMap()

Функция позволяет вам передать два параметра, определяющих границы карты представления для возврата:

NavigableMap original = new TreeMap();
original.put("1", "1");
original.put("2", "2");
original.put("3", "3");
original.put("4", "4");
original.put("5", "5");

//this submap1 will contain "3", "3"
SortedMap    submap1  = original.subMap("2", "4");

//this submap2 will contain("2", "2")("3", "3") and("4", "4") because
//    fromInclusive=true, and toInclusive=true
NavigableMap submap2 = original.subMap("2", true, "4", true);

ceilingKey()

Метод возвращает наименьший ключ в этой карте, который больше или равен элементу, переданному в качестве параметра в метод floorKey():

NavigableMap original = new TreeMap();
original.put("1", "1");
original.put("2", "2");
original.put("3", "3");


//ceilingKey will be "2".
Object ceilingKey = original.ceilingKey("2");

floorKey()

Метод выполняет действие, противоположное higherKey(). Таким образом, возвращает наибольший ключ, который меньше или равен значению параметра, переданному методу:

NavigableMap original = new TreeMap();
original.put("1", "1");
original.put("2", "2");
original.put("3", "3");

//floorKey will be "2".
Object floorKey = original.floorKey("2");

Возвращенный floorKey будет равен «2», так как наибольшим ключом, равным или меньшим, чем «2», является «2» в примере выше.

higherKey()

Метод upperKey() возвращает наименьший элемент в этой карте, который больше (не равен) элемента, переданного в качестве параметра в метод higherKey():

NavigableMap original = new TreeMap();
original.put("1", "1");
original.put("2", "2");
original.put("3", "3");


//higherKey will be "3".
Object higherKey = original.higherKey("2");

lowerKey()

Метод делает противоположноt методу upperKey(). Таким образом, возвращает наибольший ключ, который ниже значения параметра, передаваемого методу lowerKey():

NavigableMap original = new TreeMap();
original.put("1", "1");
original.put("2", "2");
original.put("3", "3");

//lowerKey will be "1"
Object lowerKey = original.lowerKey("2");

В приведенном выше примере возвращенный lowerKey будет равен «1», так как это самый высокий ключ, который ниже значения параметра «2», передаваемого методу lowerKey().

celingEntry(), floorEntry(), upperEntry(), lowerEntry()

NavigableMap также имеет методы для получения записи для данного ключа, а не сам ключ. Они ведут себя так же, как методы floorKey() и т. д., за исключением того, что они возвращают Map.Entry вместо самого ключевого объекта.

Map.Entry отображает один ключ на одно значение.

ceilingEntry()

Метод floorEntry() возвращает ключ + значение, хранящееся для наименьшего ключа в NavigableMap, который больше или равен значению параметра, переданному метру потолка(). Таким образом, roofEntry() аналогичен метру потолка(), за исключением того, что метод потолка() возвращает только ключ, а потолок() возвращает объект Map.Entry, содержащий ключ и значение.

Вот простой пример NavigableMap ceilingEntry():

NavigableMap original = new TreeMap();
navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");

//ceilingEntry will be("c", "3").
Map.Entry ceilingEntry = navigableMap.ceilingEntry("c");

В приведенном выше примере возвращаемое потолочное окно будет содержать ключ «с» и значение «3», поскольку ключ «с» является наименьшим ключом, который больше или равен значению параметра «с», передаваемому потолку().

floorEntry()

Метод floorEntry() работает напротив метода floorEntry(). Метод floorEntry() возвращает ключ + значение для наибольшего ключа, который равен или меньше значения параметра, переданного методу floorEntry(). Вот пример NavigableMap floorEntry():

NavigableMap original = new TreeMap();
navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");

//floorEntry will be("c, "3").
Map.Entry floorEntry = navigableMap.floorEntry("c");

Этаж floorEntry, возвращенный в приведенном выше примере, будет содержать пару ключ + значение «c» + «3», поскольку ключ «c» является наибольшим ключом, который меньше или равен значению параметра «c», переданному функции floorEntry(). метод.

higherEntry()

Метод upperEntry() возвращает ключ + значение, сохраненное для наименьшего ключа, который больше значения параметра, переданного в метод HigEEntry(). Вот пример более высокой Entry() NavigableMap:

NavigableMap original = new TreeMap();
navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");

//higherEntry will be("d", "4").
Map.Entry higherEntry = original.higherEntry("c");

HigherEntry, возвращаемое в приведенном выше примере, будет содержать пару ключ + значение «d» + «4», поскольку ключ «d» — это самый низкий ключ, который выше, чем значение параметра «c», переданное метру upperEntry().

lowerEntry()

Метод lowerEntry() в интерфейсе NavigableMap возвращает пару ключ + значение для старшего ключа, который ниже значения параметра, переданного метру lowerEntry(). Вот пример NavigableMap lowerEntry():

NavigableMap original = new TreeMap();
navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");

//lowerEntry will be("a", "1")
Map.Entry lowerEntry = original.lowerEntry("b");

LowerEntry, возвращаемое в этом примере, будет парой ключ + значение «a» + «1», поскольку «a» — это самый высокий ключ, который ниже, чем значение параметра «b», переданное метру lowerEntry().

pollFirstEntry()

Метод pollFirstEntry() возвращает и удаляет «первую» запись(ключ + значение) в NavigableMap или ноль, если карта пуста. «Первый» означает наименьший элемент в соответствии с порядком сортировки ключей. Вот пример pollFirstEntry():

NavigableMap original = new TreeMap();
navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");


//first is("a", "1")
Map.Entry first = original.pollFirstEntry();

Первая запись, возвращенная в вышеприведенном примере, будет парой ключ + значение «a» + «1», поскольку ключ «a» будет считаться первым ключом пар ключ + значение, добавленных в этом примере.

pollLastEntry()

PollLastEntry() возвращает и удаляет «последний» элемент на карте или ноль, если карта на Java пуста. «Последний» означает самый большой ключ в соответствии с порядком сортировки элементов карты. Вот пример pollLastEntry():

NavigableMap original = new TreeMap();
navigableMap.put("a", "1");
navigableMap.put("c", "3");
navigableMap.put("e", "5");
navigableMap.put("d", "4");
navigableMap.put("b", "2");


//first is("e", "5")
Map.Entry last = original.pollLastEntry();

Последняя запись, возвращенная в вышеприведенном примере, будет парой ключ + значение «e» + «5», поскольку ключ «e» будет считаться последним ключом пар ключ + значение, добавленных в этом примере.

Оцените статью