一、特点
1.元素有序,这里的顺序不是指的存储和取出的顺序,而是按照一定规则进行排序,具体排序方法要看构造方法
TreeSet():无参构造,根据元素的自然顺序排序也就是从小到大的排序方式进行排序
TreeSet
(Comparator comparator):带参构造,根据指定的比较器进行排序
2.没有带索引的方法,所以不能使用for循环,可以使用增强for循环或者迭代器
3.由于是Set集合,所以是不包含重复元素的集合
使用无参构造进行存储数据并遍历练习:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class TreeSetDemo { public static void main(String[] args) { //创建对象 TreeSet<Integer>ts= new TreeSet<Integer>(); //注意:泛型中引用类型要用它的包装类类型 //添加数据 ts.add( 10 ); //自动装箱实现 ts.add( 8 ); ts.add( 7 ); ts.add( 5 ); ts.add( 10 ); //由于是Set集合不包含重复元素,所以该元素不显示 //遍历方法一 增强for for (Integer i:ts){ System.out.println(i); } System.out.println( "--------------------------------" ); //遍历方法二 迭代器 Iterator<Integer>it =ts.iterator(); while (it.hasNext()){ System.out.println(it.next()); } } } |
二,补充
TreeSet集合实现了SortedSet接口, 可以对集合中元素进行自然排序, 要求集合中的元素必须是可比较的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
package com.wkcto.chapter05.set; import java.util.Comparator; import java.util.TreeSet; /** * TreeSet集合 * 可以对元素进行自然排序, 要求元素必须是可比较的 * 1)创建TreeSet集合时,通过构造方法指定Comparator比较器 * 2)如果没有指定Comparator比较器, 要求元素的类必须实现Comparable接口 * @author 蛙课网 * */ public class Test03 { public static void main(String[] args) { //1) 创建TreeSet集合,存储Person对象, 在构造方法中指定Comparator比较器,按姓名升序排序 TreeSet<Person> treeSet = new TreeSet<>( new Comparator<Person>() { //在匿名内部类中重写接口的抽象方法 @Override public int compare(Person o1, Person o2) { //指定一个比较规则 return o1.name.compareTo(o2.name); //姓名升序 } }); //2)添加元素 treeSet.add( new Person( "lisi" , 18 )); treeSet.add( new Person( "feifei" , 28 )); treeSet.add( new Person( "yong" , 35 )); treeSet.add( new Person( "bin" , 36 )); treeSet.add( new Person( "zhang" , 33 )); //3)直接打印 System.out.println( treeSet ); //4) 根据已有TreeSet创建新的TreeSet集合 TreeSet<Person> treeSet22 = new TreeSet<>(treeSet); System.out.println( treeSet22 ); //5) 使用TreeSet的无参构造, 没有指定Comparator比较器, 要求Person类实现Comparable接口 TreeSet<Person> treeSet33 = new TreeSet<>(); treeSet33.addAll(treeSet); System.out.println( treeSet33); } } |
TreeSet
集合底层是TreeMap,向TreeSet集合添加元素,实际上是把该元素作为键添加到了底层TreeMap中,TreeSet集合实际上就是底层TreeMap的键的集合。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
package com.wkcto.chapter05.set; import java.util.Comparator; import java.util.TreeSet; /** * 注意: * 在TreeSet集合中, 是根据Comparator/Comparable的比较结果是否为0来判断是否为同一个对象 * 如果Comparator的compare()方法/Comparable的compareTo()方法的返回值为0 就认为是同一个对象 * @author 蛙课网 * */ public class Test04 { public static void main(String[] args) { //创建TreeSet集合,存储Person对象, 通过构造方法指定Comparator比较器,按年龄降序排序 TreeSet<Person> treeSet = new TreeSet<>( new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { return o2.age - o1.age; } }); //当前treeSet是根据年龄比较Person大小的, 在添加Person对象时, 如果年龄相同就认为是同一个对象 treeSet.add( new Person( "lisi" , 18 )); treeSet.add( new Person( "feifei" , 18 )); treeSet.add( new Person( "zhang" , 18 )); treeSet.add( new Person( "yong" , 18 )); System.out.println( treeSet.size() ); // 1 System.out.println( treeSet ); System.out.println( treeSet.contains( new Person( "wang" , 18 ))); //true } } |
到此这篇关于Java必学基础TreeSet集合的文章就介绍到这了,更多相关Java TreeSet集合内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.cnblogs.com/CYan521/p/16073106.html