您的位置 首页 java

Java学习:Java中的集合——TreeSet

好的各位伙伴们

今天我们来分享的就是

TreeSet类

(set的另一个子类)

TreeSet

闲话不多说直接上干货

TreeSet 存储 Integer 类型的元素并遍历

代码演示

TreeSet会给集合中的元素排序并保证元素的唯一性~

TreeSet保证元素唯一和自然排序的原理

请看图:

TreeSet的底层是这样的一个 二叉树 (如上图所示),当我们存储的第一个元素的时候,会把第一个元素存在“根”的位置,存储第二个元素的时候,TreeSet 底层会调用 compareTo() 方法:

1)如果 compareTo()的返回结果为 0 则这两个元素是一样的,就不会存储,

2)如果返回负数,则第二个元素比第一个元素小,把第二个元素存储在左孩子的位置。

3)如果返回正数,则第二个元素比第一个元素大,把第二个元素存储在右孩子的位置。

以此类推~

TreeSet存储自定义对象并遍历

按照姓名排序

代码演示

自定义对象要记得实现compareTo()方法呦~不然没办法排序的~

TreeSet的比较器排序

字符串 在TreeSet中默认是按照字典顺序来存储的~

我们来写段代码验证一下

他是按照abcd的顺序来存储的~假设我们不想这样,想按照字符串长度来存储,我们应该怎么办呢? 少年比较器了解一下~

比较器原理

先来查看一下API在TreeSet的 构造方法 中有一个比较器的构造方法~

我们先来写一个比较器

这样就可以按照我们定义的比较器来给集合进行排序了~

那么来总结一下TreeSet

TreeSet 用来给排序, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列

排序的方式有两种

1)自然顺序(Comparable)

TreeSet 类的 add() 方法中会把存入的对象提升为 Comparable 类型,调用对象的 compareTo() 方法和集合中的对象比较,根据 compareTo() 方法返回的结果进行存储。

2)比较器顺序(Comparator)

创建 TreeSet 的时候可以制定一个 Comparator,如果传入了 Comparator 的子类对象, 那么TreeSet就会按照比较器中的顺序排序。add() 方法内部会自动调用 Comparator 接口中 compare() 方法排序调用的对象是 compare 方法的第一个参数,集合中的对象是 compare 方法的第二个参数。

两种方式的区别

TreeSet 构造函数 什么都不传, 默认按照类中 Comparable 的顺序。

TreeSet 如果传入 Comparator, 优先按照 Comparator。

那么TreeSet我们就说完了

伙伴们再见了

我是萌新娜娜

立志做一个不翻车的老司机

学习 java 的路上请多多指教

大家如果想要更深入了解java相关知识,私信我回复:【Java】 即可知道你们想要知道的java相关问题

文章来源:智云一二三科技

文章标题:Java学习:Java中的集合——TreeSet

文章地址:https://www.zhihuclub.com/200657.shtml

关于作者: 智云科技

热门文章

网站地图