一、TreeMap简介(基于JDK1.8)

 TreeMap是基于红黑树数据结构,是一个key-value的有序集合,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。因为红黑树是平衡的二叉搜索树,所以其put、get、remove的时间复杂度都为log(n)。

(一)、TreeMap与Map的关系

Java中的集合(十一) 实现Map接口的TreeMap

(二)、数据结构

红黑树操作包括插入、删除、左旋、右旋,这里有个可视化的红黑树操作网站,把这些操作都按动画做出来了,生动形象。

Java中的集合(十一) 实现Map接口的TreeMap

二、TreeMap的继承结构

(一)、继承结构

Java中的集合(十一) 实现Map接口的TreeMap

Java中的集合(十一) 实现Map接口的TreeMap

    • TreeMap继承AbstractMap,实现了Map接口。Map是key-value键值对接口,所以具有Map接口的特性;
    • 实现了NavigableMap接口,而NavigableMap接口继承了SortedMap接口,所以TreeMap具有一系列导航的方法,意味TreeMap是有序的键值对集合;
    • 实现了Cloneable接口,意味着TreeMap可以被克隆;
    • 实现了Serializable接口,意味着可以被序列化。

(二)、有序的实现

TreeMap实现了NavigableMap接口,NavigableMap是JDK1.6新增的,NavigableMap继承了SortedMap(这个Map是有序的),顺序一般是指由Comparable接口提供的keys的自然序,或者也可以在创建SortedMap实例时,指定一个Comparator来决定。插入SortedMap中的key的类都必须继承Comparable类(或指定一个comparator),这样才能通过k1.compareTo(k2)或comparator.compare(k1, k2)来比较两个key。

NavigableMap接口在SortedMap的基础上增加了一些导航方法来返回与搜索目标最近的元素。例如下面这些方法:

Java中的集合(十一) 实现Map接口的TreeMap

三、TreeMap的构造方法

Java中的集合(十一) 实现Map接口的TreeMap

四、TreeMap重要成员属性

TreeMap是基于R-B Tree(红黑树),它包含几个重要的成员变量: root,size,comparator

(一)、root

root 是红黑数的根节点。它是Entry类型。Entry是TreeMap的内部类,实现了Map.Entry接口,是红黑树的节点,包含了红黑树的6个基本组成部分:key(键)、value(值)、left(左孩子)、right(右孩子)、parent(父节点)、color(颜色)。Entry节点根据key进行排序,Entry节点包含的内容为value。 

(二)、size

是红黑数中节点的个数。

(三)、comparator

比较器,红黑数排序时,根据Entry中的key进行排序;Entry中的key比较大小是根据比较器comparator来进行判断的。

五、TreeMap的遍历

(一)、通过entrySet(),键值对遍历方式

①、首先通过entrySet方法获取键值对Set集合;

②、通过迭代器或者for-each循环遍历获得的Set集合

 1 // 假设treeMap中的key是String类型,value是Integer类型
 2 Set<Map.Entry<String,Integer>> set =  treeMap.entrySet();    
 3 // 迭代器遍历
 4 Iterator<Map.Entry<String,Integer>> it = set.iterator();
 5 while(it.hasNext()) {
 6     Map.Entry<String, Integer> entry = it.next();
 7     String str = entry.getKey();
 8     Integer i = entry.getValue();
 9 }
10 
11 // for-each循环遍历
12 for (Map.Entry<String, Integer> entry : set) {
13     String str = entry.getKey();
14     Integer i = entry.getValue();        
15 }
View Code

相关文章:

  • 2022-12-23
  • 2021-11-30
  • 2021-05-24
  • 2022-01-04
  • 2022-12-23
  • 2021-08-01
猜你喜欢
  • 2022-12-23
  • 2021-09-27
  • 2022-02-12
  • 2021-06-26
  • 2021-12-13
  • 2021-10-08
  • 2021-11-24
相关资源
相似解决方案