1.TreeMap简单介绍
TreeMap是一个有序的key-value集合,是非线程安全的,基于红黑树(Red-Black tree)实现。其映射根据键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
当自定义比较器时,需要自定义类实现java.lang.Comparable接口,并重写compareTo()方法。
2.TreeMap基本使用
根据键的自然顺序进行排序
public static void main(String[] args) {
Map map = new TreeMap<>();
map.put("name", "zzc");
map.put("age", "18");
map.put("sex", "m");
map.put("name", "wzc");
map.put("angle", "yhp");
System.out.println(map);
}
如何排序呢?进入到TreeMap中的put(key, value)
cmp = k.compareTo(t.key);
通过Comparable中的compareTo()方法进行排序的。
这里的key是String类型的,String类实现了Comparable接口并且重写了compareTo()方法:
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
字符串比较大小就是通过比较字符串中的字符大小,这样就可以实现排序。
【注意】:如果TreeMap中存储的元素是自定义类并且没有实现Comparable接口会怎么样?下面就尝试一下:
自定义一个User类:
public class User {
private Integer age;
private String name;
private String email;
public User(Integer age, String name, String email) {
this.age = age;
this.name = name;
this.email = email;
}
}
测试类:
public class Test