当前位置:   article > 正文

重点描述TreeSet的两种排序方式_treeset是采用二叉树的结构来存储数据的。treeset支持两种排序规则 和 。

treeset是采用二叉树的结构来存储数据的。treeset支持两种排序规则 和 。

目录

1.背景介绍

2.TreeSet保证元素唯一和排序的原理

3.两种排序(自然排序,比较器排序)

4.自然排序的实现

4.1 Integer和String对象都可以进行默认的TreeSet排序

4.2 对自定义对象进行 自然排序

5.比较器排序的实现

5.1 一般比较器写法

5.2 常见比较器写法


1.背景介绍

  1. TreeSet底层数据结构采用红黑树(平衡二叉树)来实现,元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性。根据构造方法不同,分为自然排序(无参构造)和比较器排序(有参构造)。
  2. public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable
    
  3. 基于 TreeMapNavigableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
  4. 此实现为基本操作(addremovecontains)提供受保证的 log(n) 时间开销。

2.TreeSet保证元素唯一和排序的原理

TreeSet集合底层数据结构是红黑树(平衡二叉树)。 第一个元素存储的时候,直接作为根节点。 从第二个开始,每个元素从根节点开始比较: 

大——就作为右孩子 (保证有序)

小——就作为左孩子 (保证有序)

相等——不做处理(保证唯一性)

 

3.两种排序(自然排序,比较器排序)

  • 自然排序:让元素所属的类中实现自然排序接口Comparerable接口 。可以在自定义类中实现Comparerable接口,重写compareTo()方法。 
  • 比较器排序:让集合的构造方法接收一个比较器Comparator接口的子类对象。可以在自定义类中实现Comparetor接口,重写compare()方法。

4.自然排序的实现

4.1 Integer和String对象都可以进行默认的TreeSet排序

  1. public class TEST {
  2. public static void main(String[] args) {
  3. //Integer类本身已经实现了Comparable接口
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/766137
推荐阅读
相关标签
  

闽ICP备14008679号