javaSE复习之——TreeSet类
TreeSet的概述
它是一个
二叉树集合
,小的(负数)放在左边
,大的(正数)放在右边
,并且对集合元素进行排序,并且可以保证元素的唯一性
,也就是去除重复,它的主要功能是排序。它依赖map集合
TreeSet特点:
- TreeSet集合存储元素取决于
compareTo方法
的返回值。返回0:
表示作比较的两个对象是相等的,这时集合不存这个元素。返回负数:
表示要存入的元素小于上一个作比较元素,然后把这个元素放在作比较元素的左边,如果它的左边还有元素就再进行比较返回正数:
表示大于上一个元素,这时把这个元素放在上一个元素的右边,如果右边还有元素,就再进行比较。
TreeSet存元素的原理
首先存入第一个元素(根元素),然后再存入第二个元素时调用
compareTo方法
取到返回值,然后根据返回值存元素;如果之前已经存了n个元素,那么调用compareTo逐次与每个元素作比较,
TreeSet取元素原理
从最小的开始取,也就是从左向右取,
先取根元素左边的元素
,如果根元素左边的元素下面还有元素就先从那里开始取,这里也是从左到右的原理,取根元素右边元素也是同理,从左边向右边取元素,如果左边或右边元素下面还有元素,那么也是遵循从左到右的原则。注意:左边元素全部取完后再慢慢向右边取
为什么存入自定义对象的时候会报错?
- 原因:
因为TreeSet会对集合元素进行排序,而它不知道自定义对象按照什么方法来排序,所以会报错。
- 解决方法:
让自定义对象这个类去实现Comparable接口,然后重写compareTo方法,此方法返回0则集合只能存一个对象,返回1按照存的顺序排序,返回-1按照存的顺序的倒叙存。
重写compareTo例子
1 | public int compareTo(Student o) { |
ps:比较字符串可以调用字符串的conpareTo方法比较
TreeSet比较器Comparator的概述
可以自定义对TreeSet集合进行排序
使用方法
首先创建一个类并且让这个类
实现
Comparator接口,然后重写compare
方法,最后在创建TreeSet集合对象的时候
创建这个类的对象传入即可。
特点
compare方法中第一个参数是调用的对象,第二个参数是被比较集合中的对象
两种排序方式的区别
1、构造TreeSet集合什么都不传,就默认使用类中的Comparable的顺序,也就是compareTo方法。(传入集合的自定义对象实现了Comparable接口则用自定义类)
2、构造TreeSet集合传入Comparator比较器,那么优先按照比较器顺序排序。