自定义对象作为键存储到TreeMap集合

  1. @Test
  2. public void demo1() {
  3. TreeMap<Student, String> treeMap = new TreeMap<>();
  4. treeMap.put(new Student("张三", 23), "北京");
  5. treeMap.put(new Student("李四", 13), "上海");
  6. treeMap.put(new Student("王五", 33), "广州");
  7. treeMap.put(new Student("赵六", 43), "深圳");
  8. /**
  9. * 如果Student未实现Comparable,将报如下错误:
  10. *
  11. * java.lang.ClassCastException: cn.giteasy.common.Student cannot be cast to java.lang.Comparable
  12. * 异常:TreeMap的KEY对象需要实象java.lang.Comparable接口,如果不实现,不知道如何比较,如何报错
  13. *
  14. * 此处我们Student的父类Person类实现了Comparable接口,可以正常打印
  15. * 打印结果:
  16. * {Person [name=李四, age=13]=上海, Person [name=张三, age=23]=北京, Person [name=王五, age=33]=广州, Person [name=赵六, age=43]=深圳}
  17. */
  18. System.out.println(treeMap);
  19. }

创建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]=深圳}
    }