TreeMap в Java

Класс TreeMap реализует интерфейс карты, аналогичный классу HashMap. Он сохраняет свои записи в порядке возрастания, отсортированные в соответствии с естественным упорядочением ключей или в соответствии с Компаратором зависит от аргумента конструктора. В отличие от LinkedHashMap и HashMap, TreeMap не использует хеширование для хранения ключей. Он использует структуру данных, называемую деревом Red-Black.

Красное - черное дерево - своеобразное самобалансирующееся двоичное дерево поиска, которое обладает следующими красно-черными свойствами:

 
1. Every node is either red or black.
2. Root of tree is always black.
3. Every leaf (NULL) is black.
4. If a node is red, then both its children are black.
5. Every path from root to a NULL node has same number of black nodes.

Реализация TreeMap не синхронизирована. Если несколько потоков одновременно обращаются к TreeMap, и по крайней мере один из потоков модифицирует TreeMap структурно, он должен быть синхронизирован извне. Класс TreeMap идеально подходит для перемещения ключей в отсортированном порядке. Клавиши можно сортировать с помощью интерфейса Comparable или интерфейса Comparator. Вы можете указать порядок сортировки при создании TreeMap, предоставив явный компаратор для TreeMap. Кроме того, он предоставляет методы firstKey() и lastKey() для возврата первого и последнего ключей на карте и headMap (toKey) и tailMap (fromKey) для возврата части карты, ключи которой меньше, чем toKey и больше, чем или равно от Key.

Следующая программа Java иллюстрирует несколько методов, поддерживаемых этой базой данных TreeMap:

 
import Java.util.*;
class TestClass
{
  public static void main (String[] args) throws Java.lang.Exception
  {
    // Как создать TreeMap?
    TreeMap   days = new TreeMap  ();
    // Как добавить пары Key / Value в TreeMap?
    days.put(1,"Sunday");
    days.put(2,"Monday");
    days.put(3,"Tuesday");
    days.put(4,"Wednesday");
    days.put(5,"Thursday");
    days.put(6,"Friday");
    days.put(7,"Saturday");
    // Как проходить через TreeMap?
    for(Map.Entry m:days.entrySet()){
      System.out.println(m.getKey()+" "+m.getValue());
    }
    // Как удалить определенный элемент из TreeMap?
    days.remove(3);
    Set> set = days.entrySet();
    for (Map.Entry sg : set) {
      System.out.println("Key :"+sg.getKey() + "   Value :"+days.get(sg.getKey()));
    }
    // Как найти ключ в TreeMap?
    Integer key=4;
    if(days.containsKey(key)){
      System.out.println("Key " + key + " found");
    }else{
      System.out.println("Key " + key+ " does not exist");
    }
    // Как получить ключ от его значения в TreeMap?
    Integer iKey= null;
    String value="Monday";
    for(Map.Entry entry: days.entrySet()){
      if(value.equals(entry.getValue())){
        iKey = (Integer)entry.getKey();
      break; // нарушение, потому что его одна к одной карте
    }
    }
    System.out.println("Found Key : "+ iKey +" value: " + value);
    // Как удалить весь элемент из TreeMap?
    days.clear();
    // Как найти размер TreeMap?
    System.out.println("After remove: "+ days.size());
  }
}

Источник: http://net-informations.com/Java/col/treemap.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector