GrabDuck

Класс TreeMap | Java

:

Последнее обновление: 30.10.2015

Класс TreeMap<K, V> представляет отображение в виде дерева. Он наследуется от класса AbstractMap и реализует интерфейс NavigableMap. В отличие от коллекции HashMap в TreeMap все объекты автоматически сортируются по возрастанию их ключей.

Класс TreeMap имеет следующие конструкторы:

  • TreeMap(): создает пустое отображение в виде дерева

  • TreeSet(Map<K, ? extends V> map): создает дерево, в которое добавляет все элементы из отображения map

  • TreeSet(SortedMap<K, ? extends V> smap): создает дерево, в которое добавляет все элементы из отображения smap

  • TreeMap(Comparator<? super K> comparator): создает пустое дерево, где все добавляемые элементы впоследствии будут отсортированы компаратором.

Используем класс в программе:

import java.util.*;
public class CollectionApp {

    public static void main(String[] args) {
        
       TreeMap<Integer, String> states = new TreeMap<Integer, String>();
       states.put(10, "Германия");
       states.put(2, "Испания");
       states.put(14, "Франция");
       states.put(3, "Италия");
       
       // получим объект по ключу 2
       String first = states.get(2);
       // перебор элементов
       for(Map.Entry<Integer, String> item : states.entrySet()){
       
           System.out.printf("Ключ: %d  Значение: %s \n", item.getKey(), item.getValue());
       }
       // получим весь набор ключей
       Set<Integer> keys = states.keySet();
       // получить набор всех значений
       Collection<String> values = states.values();
       
       // получаем все объекты, которые стоят после объекта с ключом 4
       Map<Integer, String> afterMap = states.tailMap(4);
       
       // получаем все объекты, которые стоят до объекта с ключом 10
       Map<Integer, String> beforeMap = states.headMap(10);
       
       // получим последний элемент дерева
       Map.Entry<Integer, String> lastItem = states.lastEntry();
       
       System.out.printf("Последний элемент имеет ключ %d значение %s \n",lastItem.getKey(), lastItem.getValue());
        
       Map<String, Person> people = new TreeMap<String, Person>();
       people.put("1240i54", new Person("Tom"));
       people.put("1564i55", new Person("Bill"));
       people.put("4540i56", new Person("Nick"));
       
       for(Map.Entry<String, Person> item : people.entrySet()){
       
           System.out.printf("Ключ: %s  Значение: %s \n", item.getKey(), item.getValue().getName());
       }
    }
}
class Person{
    
    private String name;
    public Person(String value){
        
        name=value;
    }
    String getName(){return name;}
}

Кроме собственно методов интерфейса Map класс TreeMap реализует методы интерфейса NavigableMap. Например, мы можем получить все объекты до или после определенного ключа с помощью методов headMap и tailMap. Также мы можем получить первый и последний элементы и провести ряд дополнительных манипуляций с объектами.