Рубрики
Без рубрики

Java SortedMap – Отсортированная карта на Java

Карта сортировки Java, Карта сортировки в Java, Карта сортировки Java, Реализация карты сортировки Java, Пример карты сортировки Java, пример карты дерева карты сортировки, методы карты сортировки Java

Автор оригинала: Pankaj Kumar.

Java SortedMap-это Карта , которая обеспечивает полное упорядочение по своим ключам.

Java-карта сортировки

Java SortedMap может быть упорядочен либо в соответствии с естественным порядком его ключей, либо путем предоставления Компаратора при создании карты.

Если мы не предоставляем никакого Компаратора (который должен принимать ключ карты) при создании SortedMap, все ключевые элементы карты должны иметь сопоставимый интерфейс для обеспечения упорядочения.

Конструкторы Java SortedMap

В соответствии со спецификацией все классы реализации отсортированных карт общего назначения должны содержать следующие стандартные конструкторы:

  1. Конструктор void (без аргументов): Он должен создать отсортированную карту, которая сортируется в соответствии с естественным порядком ее ключей.
  2. Конструктор с аргументом типа Comparator: Он должен создать отсортированную карту, ключи которой отсортированы в соответствии с указанным компаратором.
  3. Конструктор с аргументом типа Map: Он должен создать отсортированную карту с элементами предоставленной карты, которая сортируется в соответствии с естественным порядком ее ключей.
  4. Конструктор с аргументом типа SortedMap: Он должен вести себя как конструктор копирования и создавать новую отсортированную карту с теми же элементами и тем же порядком предоставленной отсортированной карты.

Конечно, выполнить эти рекомендации невозможно, поскольку интерфейсы не могут указывать конструкторы в отличие от методов.

Реализация Java SortedMap

Древовидная карта является широко используемой реализацией SortedMap . Давайте создадим его экземпляры, используя различные конструкторы, упомянутые выше:

SortedMap personMap = new TreeMap<>();
personMap.put("Dan Brown", new PersonalDetails("Writer", LocalDate.of(1964, 6, 22), "New Hampshire"));
personMap.put("Ayn Rand", new PersonalDetails("Writer", LocalDate.of(1905, 2, 2), "Saint Petersburg"));
personMap.put("Devdutt Pattanaik", new PersonalDetails("Mythologist", LocalDate.of(1970, 12, 11), "Mumbai"));

personMap.keySet().forEach(key -> {
	System.out.println(key + " -> " + personMap.get(key));
});

Персональные данные реализация:

package com.journaldev.sortedmap;

import java.time.LocalDate;

class PersonalDetails {
	String occupation;
	LocalDate dataOfBirth;
	String city;

	public PersonalDetails(String occupation, LocalDate dataOfBirth, String city) {
		this.occupation = occupation;
		this.dataOfBirth = dataOfBirth;
		this.city = city;
	}

	@Override
	public String toString() {
		return this.occupation + ", from " + this.city;
	}
}

Он распечатает карту в соответствии с естественным порядком ее ключей. В этом случае типом ключа является Строка , которая реализует Сопоставимый интерфейс.

Вместо конструктора без аргументов, если мы предоставим реализацию Comparator в аргументе конструктора, выходные данные будут иметь другой порядок. Давайте напишем лямбда-выражение для обеспечения compareTo реализации Comparator интерфейса. Допустим, мы хотим отсортировать ключи по длине ключей в порядке убывания:

SortedMap personMap = new TreeMap<>((s1, s2) -> s2.length() - s1.length());

В этом случае результат будет таким, как показано ниже.

Devdutt Pattanaik -> Mythologist, from Mumbai
Dan Brown -> Writer, from New Hampshire
Ayn Rand -> Writer, from Saint Petersburg

Теперь мы создадим отсортированную карту, передав другой объект карты или другую отсортированную карту.

Map map = new HashMap<>();
map.put("Dan Brown", 
  new PersonalDetails("Writer", LocalDate.of(1964, 6, 22), "New Hampshire"));
map.put("Ayn Rand",
  new PersonalDetails("Writer", LocalDate.of(1905, 2, 2), "Saint Petersburg"));
map.put("Devdutt Pattanaik",
  new PersonalDetails("Mythologist", LocalDate.of(1970, 12, 11), "Mumbai"));

SortedMap sortedMap = new TreeMap<>(map);
sortedMap.keySet().forEach(key -> {
    System.out.println(key + " -> " + sortedMap.get(key));
});

System.out.println("\nSorted Map constructed using another sorted map:");
SortedMap copiedMap = new TreeMap<>(sortedMap);
copiedMap.keySet().forEach(key -> {
    System.out.println(key + " -> " + copiedMap.get(key));
});

Выход:

Ayn Rand -> Writer, from Saint Petersburg
Dan Brown -> Writer, from New Hampshire
Devdutt Pattanaik -> Mythologist, from Mumbai

Sorted Map constructed using another sorted map:
Ayn Rand -> Writer, from Saint Petersburg
Dan Brown -> Writer, from New Hampshire
Devdutt Pattanaik -> Mythologist, from Mumbai

Методы Java SortedMap По сравнению с Map, для использования преимуществ упорядочения предусмотрено несколько дополнительных методов. Давайте рассмотрим каждый из представленных методов.Компаратор comparator(): Возвращает экземпляр компаратора, используемый для упорядочения ключей на карте. Если ключи отсортированы в соответствии с их естественным порядком, он возвращает значение null.Set entrySet(): Возвращает набор отображений, содержащихся на карте.K FirstKey(): Возвращает первый(самый низкий) ключ на карте.K lastKey(): Возвращает последний(самый высокий) ключ на карте.Set keySet(): Возвращает набор, содержащий все ключи карты.Карта с сортировкой(K тоКей): Возвращает представление части карты, ключи которой меньше тоКей.Хвостовая карта SortedMap(K от ключа): Возвращает представление части карты, ключи которой больше или равны от ключа.Коллекционные ценности(): Возвращает представление коллекции значений, содержащихся на этой карте.Обратите внимание, что набор, возвращаемый в приведенных выше методах, является представлением фактического набора. Изменения, внесенные в эти представления, отражаются на фактической структуре данных следующим образом well.Java