直通车:Java集合框架系列目录
- 基本概念
- 继承关系
- 结构特点
- 常用API
- 遍历方式
- 代码示例
#1.基本概念
TreeMap:一种键值有序排列的映射表。
#2.继承关系
TreeMap是一个继承于AbstractMap
的散列表,它存储的内容是键值对(key/value)映射。
TreeMap 实现了NavigableMap
接口,意味着它支持一系列的导航方法。比如返回有序的key
集合。
TreeMap实现了Cloneable
接口,即覆盖了函数clone()
,能被克隆。
TreeMap实现java.io.Serializable
接口,意即TreeMap支持序列化,能通过序列化传输。
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable {}
#3.结构特点
-
基于红黑树实现
红黑树又称红-黑二叉树,它首先是一棵二叉树,它具备二叉树所有的特性。同时红黑树亦是一颗自平衡的排序二叉树。 -
默认按升序排序
如果需要按其他顺序排列,需要定义一个比较器类,实现Comparator
接口,重写compare
方法。 -
不允许null键,允许null值
可以通过覆写compare
方法(令元素为null
时返回非0值)来允许TreeMap
添加null键。但这样做的话,在用get(null)
时会返回null
。
TreeMap<String, Integer> ts = new TreeMap<>(new Comparator<String>() {
public int compare(String s1, String s2) { // 这里明确s1是要拿进来存的数据 s2是已经存进来的数据
if (s1 == null) {
return 1;
}
else {
return s2.charAt(0) - s1.charAt(0);
}
}
});
ts.put(null, 3);
System.out.println(ts.get(null));//输出null
不覆写compare
的缺省情况下,get(null)
会返回java.lang.NullPointerException
空指针异常。
- 不允许一键多值
可以通过覆写compare
方法(令元素相等时返回非0值)来允许TreeMap
的某个键Key
添加多个值。但这样做的话,在用get
方法获取该键的Value
时会返回null
。
Map<Integer, String> map = new TreeMap<>(new Comparator<Integer>() {
public int compare(Integer i1, Integer i2) {
// TO