Java SortedMap

Интерфейс Java SortedMap, java.util.SortedMap, является подтипом интерфейса java.util.Map, за исключением того, что элементы, хранящиеся в карте, отсортированы внутри. Это означает, что вы можете перебирать элементы в порядке сортировки.

Реализация

Java поставляется со встроенной реализацией интерфейса SortedMap под названием TreeMap(java.util.TreeMap).

Как создать SortedMap?

Вы создаете экземпляр TreeMap через его конструктор:

SortedMap sortedMap = new TreeMap();

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

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

Comparator comparator = new MyComparatorImpl();

SortedMap sortedMap = new TreeMap(comparator);

Порядок сортировки

Порядок сортировки — это либо естественный порядок сортировки элементов (если они реализуют java.lang.Comparable), либо порядок, определенный компаратором, который вы можете задать.

По возрастанию или по убыванию

По умолчанию элементы идут в порядке возрастания, начиная с «наименьшего» и перемещаясь к «наибольшему». Но также возможно перебирать элементы в порядке убывания, используя метод TreeMap.descendingKeySet().

Итерация

Вы перебираете SortedMap точно так же, как вы перебираете обычную карту. Так как ключи отсортированы, вам, скорее всего, потребуется перебрать ключи в их отсортированном порядке. Вы перебираете их, вызывая его метод keySet(), например так:

SortedMap sortedMap = new TreeMap();

sortedMap.put("a", "one");
sortedMap.put("b", "two");
sortedMap.put("c", "three");

Iterator iterator = sortedMap.keySet().iterator();

while(iterator.hasNext()) {
    String key   =(String) iterator.next();

    String value =(String) sortedMap.get(key);
}

Помните, что если вы хотите перебирать ключи в порядке убывания, а не в порядке возрастания, используйте метод sortedMap.descendingKeySet(). Iterator(), например:

SortedMap sortedMap = new TreeMap();

sortedMap.put("a", "one");
sortedMap.put("b", "two");
sortedMap.put("c", "three");

Iterator iterator = sortedMap.descendingKeySet().iterator();

while(iterator.hasNext()) {
    String key   =(String) iterator.next();

    String value =(String) sortedMap.get(key);
}

Как получить компаратор?

Если ваша SortedMap была создана с использованием Comparator, вы можете получить его с помощью метода comptor():

Comparator comparator = sortedMap.comparator();

Как получить первый ключ?

Интерфейс имеет метод ярлыков для получения первого (самого низкого) ключа в наборе ключей. Этот метод называется firstKey():

String firstKey =(String) sortedMap.firstKey();

Как получить последний ключ?

Интерфейс имеет метод для получения последнего (самого высокого) ключа в наборе ключей — lastKey():

String lastKey =(String) sortedMap.lastKey();

Получение первых элементов

Интерфейс имеет метод headMap(). Он возвращает новую карту, которая содержит первые элементы SortedMap в соответствии с используемым порядком сортировки. Метод принимает параметр, который действует как разделитель того, какие элементы включаются в возвращаемую карту заголовка. Все элементы с ключом, который меньше / ранее, чем параметр, переданный методу. Вот пример получения карты заголовка:

SortedMap sortedMap = new TreeMap();

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

SortedMap headMap = sortedMap.headMap("c");

System.out.println(headMap);

Возвращаемая карта головы будет содержать пары ключ-значение («a», «1») и («b», «2»), поскольку ключи «a» и «b» меньше / раньше, чем «c» в порядке сортировки (естественном порядке), используемом этим SortedMap.

Получение последних элементов

Интерфейс имеет метод с именем tailMap(), который возвращает новую карту Map. Она содержит последние элементы SortedMap в соответствии с используемым порядком сортировки. Метод принимает параметр, который действует как разделитель того, какие элементы включаются в возвращенную карту хвостов. Все элементы с ключом, равным или превышающим параметр, переданный методу. Вот пример:

SortedMap sortedMap = new TreeMap();

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

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

System.out.println(tailMap);

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

Подкарта

Имеется метод subMap(), который может возвращать новую карту — подкарту SortedMap. Метод принимает два параметра, которые действуют как разделители для того, какие элементы включены в возвращаемую подкарту. Она будет включать все элементы, у которых ключ равен первому параметру или превышает его, а второй — меньше. Вот пример:

SortedMap sortedMap = new TreeMap();

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

SortedMap subMap = sortedMap.subMap("b", "e");

System.out.println(subMap);

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

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