TreeMap集合怎样保证有序性
首先看一下TreeMap集合的使用,TreeMap集合也是键值对的,我们添加下面四个元素
package com.tset.one; import java.util.TreeMap; /** * @author :caizhengjie * @description:TODO * @date :2021/7/21 10:48 下午 */ public class TestTreeMap { public static void main(String[] args) { TreeMap<String,Integer> treeMap = new TreeMap<>(); treeMap.put("tom",99); treeMap.put("jack",73); treeMap.put("bob",85); treeMap.put("jery",62); // 通过lambada表达式输出key,value treeMap.forEach((k,v) -> System.out.println(k + ": " + v)); } }
// 运行结果 bob: 85 jack: 73 jery: 62 tom: 99
发现遍历出来的结果是有序的,按照key的升序依次遍历,联想到Hash Map,它遍历出来的结果是无序的,它是按照key的hash进行散列的,那TreeMap是怎么样保证节点遍历出来是有序的呢?我们需要看一下源代码
它是一个红黑树,我们知道红黑树是一个平衡树,可以保证我们的节点有序,显然TreeMap底层用红黑树来保证节点的有序性,通过查看TreeMap的成员变量
我们可以发现root是红黑树的根节点
TreeMap底层
TreeMap实现了SotredMap接口,它是有序的集合。
TreeMap底层数据结构是一个红黑树,每个key-value都作为一个红黑树的节点。
如果在调用TreeMap的构造函数时没有指定比较器,则根据key执行自然排序。