TreeMap是红黑二叉树的典型实现。我们打开TreeMap的源码,发现里面有一行核心代码:
root用来存储整个树的根节点。我们继续跟踪Entry(是TreeMap的内部类)的代码:
可以看到里面存储了本身数据、左节点、右节点、父节点、以及节点颜色。 TreeMap的put()/remove()方法大量使用了红黑树的理论。
TreeMap和HashMap用法大致相同,不同点是TreeMap可以用来排序。
HashMap和TreeMap比较:
-
HashMap是Key无序的(key可以为null),而TreeMap是Key有序的(key不能为null)。
-
效率高于,在需要排序的时才选用。
- TreeMap 默认排序
对于简单的数字、英文字母等类型,按照key的字典顺序来排序(升序)。
【示例】TreeMap 默认排序
// 创建一个TreeMap对象
TreeMap<String, Integer> map = new TreeMap<String, Integer>();
// 添加键值对
map.put("e", 55);
map.put("a", 11);
map.put("d", 44);
map.put("c", 33);
map.put("d", 44); // 只能输出一个
map.put("b", 22);
// 遍历输出map中的键和值
Set<Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Entry