TreeMap
TreeMap的原理
TreeMap是一个有序的key-value集合,基于红黑树的 Navigable 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator 进行排序
红黑树
- 根节点是黑色
- 每个节点都只能是红色或者黑色
- 每个叶节点(NIL节点,空节点)是黑色的。
- 如果一个节点是红色的,则它两个子节点都是黑色的,也就是说在一条路径上不能出现两个红色的节点。
- 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
- TreeMap存储 Key-Value对时,需要根据Key对key-value对进行排序。TreeMap可以保证所有的Key-Value对处于有序状态
- TreeMap的Key的排序:TreeSet集合默认会进行排序。因此必须有排序,如果没有就会报类型转换异常。
package org.lanqiao.treemap.demo;
public class Student implements Comparable{
private String name;
private Integer age;
public Student() {
}
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Object o) {
// 先根据年龄进行排序,如果年龄相同,则使用姓名进行