TreeSet是SortedSet接口的实现类,底层采用TreeMap实现
TreeSet存储的元素都处于排序状态
所有使用TreeSet存储排序的类都要实现Comparable接口,该接口定义了一个compareTo()方法,该方法返回一个整数值。
当一个对象调用该方法与另一个对象比较时,如果对象相等,则返回0,如果前者大于后者,则返回正整数,如果前者小于后者,则返回负整数。
java常用的类已经实现了该接口,除了所有基本类型的包装类之外,Date()类和Time()类也实现了该接口,比较逻辑是后面的时间日期比前面的时间日期大。
如果把一个没有实现Comparable接口的类添加到TreeSet中,程序会报错。
TreeSet<Object> treeSet = new TreeSet<>();
//程序执行到这里时不会报错
treeSet.add(new MyClass());
//程序执行到这里时会报错,因为在这里要调用该对象的compareTo()方法与集合中其他元素作比较
//该类没有实现Comparable接口,所以会引发ClassCastException异常
treeSet.add(new MyClass());
定制排序
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
TreeSet默认是根据元素的大小将它们升序排序,如果想要让他们降序排序,则可以通过上面的构造方法,传入一个Comparator接口的实现类,TreeSet这时候会使用该实现类来负责集合元素的排序。如果不方便让要排序的对象实现Comparable接口,则可以使用这种方法。
本文深入讲解了Java中TreeSet的内部实现,包括其基于TreeMap的排序机制,以及如何通过实现Comparable接口或使用Comparator接口进行定制排序。了解如何避免ClassCastException异常,并掌握TreeSet的升序和降序排列。
1678

被折叠的 条评论
为什么被折叠?



