TreeSet
基于排列顺序实现元素不重复
- 实现了SortedSet接口,对集合元素自动排序
- 元素对象的类型必须实现Comparable接口,指定排序规则
- 通过CompareTo方法确定是否为重复元素
TreeSet的基本使用
数据添加正常,没有报错
我们再来添加类型数据,比如说person类型的数据,包含了姓名和年龄数据。
运行程序,返现报错:person类型的数据没有办法转化成comparable对象的数据,意思就是说,treeset是二叉树,红黑树。它没办法比较person数据的大小。不像是字母和数字可以判断大小
所以使用TreeSet 的要求: 你的元素必须要实现Comparable接口 ★★★★★
只需要重写compareTo方法就可以了
其中一种是 自己定义比较的规则 ,先比较姓名再比较年龄
compareTo方法返回值为 0 ,认为是重复元素
- 如果将
compareTo()
返回值写死为0,元素值每次比较,都认为是相同的元素,这时就不再向TreeSet中插入除第一个外的新元素。所以TreeSet中就只存在插入的第一个元素。 - 如果将
compareTo()
返回值写死为1,元素值每次比较,都认为新插入的元素比上一个元素大,于是二叉树存储时,会存在根的右侧,读取时就是正序排列的。 - 如果将
compareTo()
返回值写死为-1,元素值每次比较,都认为新插入的元素比上一个元素小,于是二叉树存储时,会存在根的左侧,读取时就是倒序序排列的。
我们还可以通过在创建集合的时候就指定他的比较规则,使用的是Comparator,匿名内部类