当前位置:网站首页 > 技术博客 > 正文

java set集合有序吗



1、TreeSet集合使用红黑树数据结构实现元素的排序和存储,底层实际上是一个TreeMap集合

2、Tree Map集合底层实际上是一个二叉树。

3、放到TreeSet集合中的元素,等同于放到TreeMap集合中去了。

4、放到TreeSet集合中的元素:有序且唯一,即不可重复,有序是指可以按照元素的大小顺序自动排序。

5、TerrSet不允许插入null 元素,否则报空指针异常。

6、高效性能: 由于底层数据结构的特点, 提供了高效的插入、删除和查找操作。它的时间复杂度通常是 O(log n),其中 n 是集合的大小。

7、可导航性: 提供了一系列方法,如 等,用于在集合中查找元素或获取与给定元素最接近的元素。

8、不可变性: 是不可变的集合,一旦创建,它的内容不可修改。如果需要对集合进行修改,可以创建一个新的 并复制元素。

TreeSet集合的常用构造方法 方法名 描述
TreeSet()
构造一个新的空 TreeSet 集合,根据其元素的自然顺序进行排序
TreeSet(Comparator<?
super E> comparator)
构造一个新的空 TreeSet 集合,根据指定的比较器进行排序
TreeSet(Collection<?
extends E> c)
构造一个新的 TreeSet 集合,,该 TreeSet 集合包含指 定集合中的元素,并根据其元素的自然顺序进行排序。
 
  

运行结果:  a
                    b
                    laoliu
                    zhangsan
                    zhangss
                    老六
                    --------------------------
                    1=zhangsan
                    2=liss
                    3=lisi








9、放到TreeSet或者TreeMap集合key部分中的元素要想做到排序,包括两种方式:

  • 第一种:放在集合中的元素实现java.lang.Comparable接口
  • 第二种:在构造TreeSet或者TreeMap集合的时候给它传一个比较器对象
    • 下面就分别介绍一下这两种方式的实现。

TreeSet集合无法对自定义类型排序:出现这种情况的原因是没有实现java.lang.comParable接口

这里的排序规则可参考下图所示的自平衡二叉树的讲解原理:

 所以需要实现comParable接口,代码实现如下所示:

 
  

运行结果:person[age=12]

                 person[age=52]

                 person[age=92]

                 person[age=102]

 
  

 运行结果:

  •   person[age=12]
      person[age=52]
      person[age=92]
      person[age=102]


Comparable接口和Comparator怎么选择呢?

  • 当比较规则不会发生改变的时候,或比较规则只有1个的时候,建议实现Comparable接口。
  • 如果比较规则有多个的时候,并且需要多个比较规则之间频繁切换,建议使用Comparator比较器。

Comparator的设计符合OCP原则。。

支持:🎁🎁🎁如果你觉得博主的文章的不错或者对你有帮助,可以点一个免费的关注支持一下博主,如果三连收藏支持就更好了吖,蟹蟹。

你的鼓励将是我创作的最大动力!!!

  • 上一篇: c语言bsearch函数
  • 下一篇: bat批处理教程
  • 版权声明


    相关文章:

  • c语言bsearch函数2025-06-10 16:01:03
  • 图形验证码redis存储2025-06-10 16:01:03
  • c语言三维图代码2025-06-10 16:01:03
  • 简述uboot的作用2025-06-10 16:01:03
  • 数字图像处理实验怎么做2025-06-10 16:01:03
  • bat批处理教程2025-06-10 16:01:03
  • perimeter函数2025-06-10 16:01:03
  • python练手小项目2025-06-10 16:01:03
  • python中pyc文件2025-06-10 16:01:03
  • js设置页面跳转2025-06-10 16:01:03