Java TreeMap类使用教程

x33g5p2x  于2021-08-21 转载在 Java  
字(4.2k)|赞(0)|评价(0)|浏览(381)

在本指南中,我们通过实例看到TreeMap类的实现。

TreeMap 是一个基于红黑树的NavigableMap实现。
TreeMap中的元素总是根据键的自然排序,或者根据你在创建TreeMap时提供的自定义比较器进行排序。

我们将学到什么?

  1. 概述TreeMap
  2. 创建TreeMap。例子
  3. TreeMap 排序顺序示例(升序)
  4. TreeMap使用自定义比较器(降序)。
  5. 访问一个TreeMap的元素。

1. TreeMap类概述

Java TreeMap 类通过使用Tree来实现Map 接口。它提供了一种有效的手段,以排序的方式存储键/值对。
关于JavaTreeMap类的重要内容是。

  • 一个TreeMap包含基于键的值。它实现了NavigableMap接口并扩展了AbstractMap类。
  • 它只包含唯一的元素。
  • 它不能有一个null键,但可以有多个空值。
  • 它与HashMap相同,但保持升序。

2. 创建TreeMap例子

// Creating a TreeMap
TreeMap<String, String> fileExtensions  = new TreeMap<>();

// Adding new key-value pairs to a TreeMap
fileExtensions.put("python", ".py");
fileExtensions.put("c++", ".cpp");
fileExtensions.put("kotlin", ".kt");
fileExtensions.put("golang", ".go");
fileExtensions.put("java", ".java");

// Printing the TreeMap (Output will be sorted based on keys)
System.out.println(fileExtensions);

输出。

{c++=.cpp, golang=.go, java=.java, kotlin=.kt, python=.py}

3. TreeMap 排序顺序示例(升序)

在这个例子中,元素是按自然顺序排序的。

public class MapInterfaceTreeSetImpl {
public static void main(String[] args) {
    treeMapDemo();
 }

 // maintain keys in ascending order.
 private static void treeMapDemo() {
     // Constructs a new, empty tree map, using the natural ordering of its
     // keys
      Map<String, String> treeMap = new TreeMap<>();
      treeMap.put("key1", "value1");
      treeMap.put("key3", "value3");
      treeMap.put("key2", "value2");
      treeMap.put("key0", "value0");

      // loop linkedHahMap using java 8 forEach method
      treeMap.forEach((k, v) -> {
      System.out.println(k);
      System.out.println(v);
  });

     // loop linkedHahMap using before java 8 forEach method
     for (Entry pair : treeMap.entrySet()) {
         System.out.println(pair.getKey());
         System.out.println(pair.getValue());
     }
   }
}

输出:

key0
value0
key1
value1
key2
value2
key3
value3

4. TreeMap与自定义的Comparator(降序排列)

// Creating a TreeMap with a Custom comparator (Descending order)
SortedMap<String, Integer> numberWordMapping = new TreeMap<>(Comparator.reverseOrder());
// Adding new key-value pairs to a TreeMap
numberWordMapping.put("one", 1);
numberWordMapping.put("two", 2);
numberWordMapping.put("three", 3);
numberWordMapping.put("five", 5);
numberWordMapping.put("four", 4);

// Printing the TreeMap (The keys will be sorted based on the supplied
// comparator)
System.out.println(numberWordMapping);

输出:

{two=2, three=3, one=1, four=4, five=5}

请注意,键值是按降序排序的。

5. 访问一个TreeMap的元素

求一个TreeMap的大小。

TreeMap<Integer, String> users = new TreeMap<>();
users.put(1, "Ramesh");
// Finding the size of a TreeMap
System.out.println("Total number of users: " + users.size());

检查TreeMap中是否存在一个给定的键。

TreeMap<Integer, String> users = new TreeMap<>();

users.put(1003, "A");
users.put(1001, "B");
users.put(1002, "C");
users.put(1004, "D");
// Check if a given key exists in a TreeMap
Integer id = 1004;
if(users.containsKey(id)) {
    // Get the value associated with a given key in a TreeMap
    String name = users.get(id);
    System.out.println("user with id " + id + " : " + name);
} else {
    System.out.println("user does not exist with id : " + id);
}

检索TreeMap中的第一个元素。

TreeMap<Integer, String> users = new TreeMap<>();

users.put(1003, "A");
users.put(1001, "B");
users.put(1002, "C");
users.put(1004, "D");
// Find the first entry
System.out.println("First entry in users map : " + users.firstEntry());

检索TreeMap中的最后一个元素。

TreeMap<Integer, String> users = new TreeMap<>();

users.put(1003, "A");
users.put(1001, "B");
users.put(1002, "C");
users.put(1004, "D");
// Find the last entry
System.out.println("Last entry in users map : " + users.lastEntry());

检索键值刚好比给定键值低的元素。

TreeMap<Integer, String> users = new TreeMap<>();

users.put(1003, "A");
users.put(1001, "B");
users.put(1002, "C");
users.put(1004, "D");
// Find the entry whose key is just less than the given key
Map.Entry<Integer, String> users = users.lowerEntry(1002);

检索键值刚好比给定键值高的元素。

TreeMap<Integer, String> users = new TreeMap<>();

users.put(1003, "A");
users.put(1001, "B");
users.put(1002, "C");
users.put(1004, "D");
// Find the entry whose key is just higher than the given key
Map.Entry<Integer, String> usersEx = users.higherEntry(1002);

相关文章