专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java中treemap原理介绍

Java中treemap原理介绍

更新时间:2020-08-24 16:57:37 来源:动力节点 浏览4708次

一、TreeMap介绍

TreeMap是一个有序的key-value集合,它是通过红黑树实现的。

TreeMap继承于AbstractMap,所以它是一个Map,即一个key-value集合。

TreeMap实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。

TreeMap实现了Cloneable接口,意味着它能被克隆。

TreeMap实现了java.io.Serializable接口,意味着它支持序列化

TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法。

TreeMap的基本操作containsKey、get、put和remove的时间复杂度是log(n)。

另外,TreeMap是非同步的。它的iterator方法返回的迭代器是fail-fastl的。

java treemap原理

二、红黑树(Red Black Tree)

是一种自平衡二叉查找树

(1)检索效率O(log n)

(2)红黑树的五点规定:

a每个节点都只能是红色或者黑色

b根节点是黑色

c每个叶节点(NIL节点,空节点)是黑色的。

d从每个叶子到根的所有路径上不能有两个连续的红色节点。

e从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

三、TreeMap使用举例

TreeMap默认按照key递增排序

public class Main {
 public static void main(String[] args) {
 TreeMap treeMap = new TreeMap<>();
 TreeMap treeMap1 = new TreeMap<>();
 treeMap.put(7, "h");
 treeMap.put(8, "g");
 treeMap.put(9, "f");
 treeMap.put(10, "e");
 treeMap.put(14, "a");
 treeMap.put(1, "w");
 treeMap.put(2, "v");
 treeMap.put(3, "u");
 treeMap.put(11, "d");
 treeMap.put(12, "c");
 treeMap.put(13, "b");
 treeMap.put(4, "k");
 treeMap.put(5, "j");
 treeMap.put(6, "i");
 System.out.println("----------------------*------------------------------");
 while (treeMap.size() != 0) {
 //treemap自动按照key进行递增排序
 System.out.println(treeMap.firstEntry().getKey() + " - " + treeMap.firstEntry().getValue());
 treeMap1.put(treeMap.firstEntry().getValue(), treeMap.firstEntry().getKey());
 treeMap.remove(treeMap.firstKey());
 }
 System.out.println("----------------------*------------------------------");
 while (treeMap1.size() != 0) {
 //treemap自动按照key进行递增排序
 System.out.println(treeMap1.firstEntry().getKey() + " - " + treeMap1.firstEntry().getValue());
 treeMap1.remove(treeMap1.firstKey());
 }
 System.out.println("----------------------*------------------------------");
 }
}


得到结果:

----------------------*------------------------------
1 - w
2 - v
3 - u
4 - k
5 - j
6 - i
7 - h
8 - g
9 - f
10 - e
11 - d
12 - c
13 - b
14 - a
----------------------*------------------------------
a - 14
b - 13
c - 12
d - 11
e - 10
f - 9
g - 8
h - 7
i - 6
j - 5
k - 4
u - 3
v - 2
w - 1

以上就是动力节点java培训机构的小编针对“Java中treemap原理介绍”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>