TreeSet与TreeMap笔记

TreeSet

注意:TreeSet在添加元素时进行排序,数据更改不会影响原来的顺序。使用过程中最好不要改变其元素内容,可能会导致内容重复。为避免重复可以将元素类内部属性定义为final常量,就不能修改了。

  1. 数据元素可以排序且不可重复
    因为TreeSet也是实现了Set接口的实体类,而Set接口中元素不可重复。
  2. HashSet与TreeSet对比
    HashSet中的元素必须重写hashcode和equals方法,用来去重,而TreeSet因为元素可以排序,即定义了排序规则就可以通过比较,结果为0则表示重复了。
  3. 对于两种不同的排序定义实现选择不同的构造器
  • Comparable选择new TreeSet();
  • Comparator选择new TreeSet(Comparator comparator);

TreeSet应用示例
很简单,继续使用上面的Person类,因为在存放时就已经排序了,直接输出即可查看排序后的内容

  1. Comparator接口定义的类的排序
public class Demo1 {

    public static void main(String[] args) {
        TreeSet list=new TreeSet<>(new PersonHandsomSort());
        list.add(new Person("张学友",105));
        list.add(new Person("刘德华", 100));
        list.add(new Person("Viking",300));
        
        System.out.println(list);
    }
}
  1. 实现Compareble接口的自定义类的排序
public class Demo1 {

    public static void main(String[] args) {
        //直接调用空构造器 
        TreeSet list=new TreeSet<>();
        list.add(new Person("张学友",105));
        list.add(new Person("刘德华", 100));
        list.add(new Person("Viking",300));
        
        System.out.println(list);
    }
}

TreeMap

TreeMap与TreeSet的使用类似。
TreeMap要求键是可以排序的,上面的Person类可以直接当做值来排序,键随便放点什么就好了。

  1. Comparator接口
public class Demo1 {

    public static void main(String[] args) {
        TreeMap map=new TreeMap<>(new PersonHandsomSort());
        Person p1=new Person("张学友",105);
        Person p2=new Person("刘德华", 100);
        Person p3=new Person("Viking",300);
        
        map.put(p1, "123");
        map.put(p2, "123");
        map.put(p3, "123");
        //利用map的KeySet方法,得到存放键的数组,即Person的数组,再打印
        Set persons=map.keySet();
        System.out.println(persons);
    }
}
  1. Comparable接口类似,不再重复

你可能感兴趣的:(TreeSet与TreeMap笔记)