自定义对象作为键存储到TreeMap集合
@Test public void demo1() { TreeMap<Student, String> treeMap = new TreeMap<>(); treeMap.put(new Student("张三", 23), "北京"); treeMap.put(new Student("李四", 13), "上海"); treeMap.put(new Student("王五", 33), "广州"); treeMap.put(new Student("赵六", 43), "深圳"); /** * 如果Student未实现Comparable,将报如下错误: * * java.lang.ClassCastException: cn.giteasy.common.Student cannot be cast to java.lang.Comparable * 异常:TreeMap的KEY对象需要实象java.lang.Comparable接口,如果不实现,不知道如何比较,如何报错 * * 此处我们Student的父类Person类实现了Comparable接口,可以正常打印 * 打印结果: * {Person [name=李四, age=13]=上海, Person [name=张三, age=23]=北京, Person [name=王五, age=33]=广州, Person [name=赵六, age=43]=深圳} */ System.out.println(treeMap); }
创建TreeMap的时候,传入一个比较器
@Test
public void demo2(){
TreeMap<Student, String> treeMap = new TreeMap<>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return s1.getAge() - s2.getAge();//按照年龄比较
}
});
treeMap.put(new Student("张三", 23), "北京");
treeMap.put(new Student("李四", 13), "上海");
treeMap.put(new Student("赵六", 43), "深圳");
treeMap.put(new Student("王五", 33), "广州");
System.out.println(treeMap);
//{Person [name=李四, age=13]=上海, Person [name=张三, age=23]=北京, Person [name=王五, age=33]=广州, Person [name=赵六, age=43]=深圳}
}