Java基础必学TreeSet集合

网友投稿 254 2022-08-16


Java基础必学TreeSet集合

一、特点

1.元素有序,这里的顺序不是指的存储和取出的顺序,而是按照一定规则进行排序,具体排序方法要看构造方法

TreeSet():无参构造,根据元素的自然顺序排序也就是从小到大的排序方式进行排序

TreeSet(Comparator comparator):带参构造,根据指定的比较器进行排序

2.没有带索引的方法,所以不能使用for循环,可以使用增强for循环或者迭代器

3.由于是Set集合,所以是不包含重复元素的集合

使用无参构造进行存储数据并遍历练习:

public class TreeSetDemo {

public static void main(String[] args) {

//创建对象

TreeSetts=new TreeSet();//注意:泛型中引用类型要用它的包装类类型

//添加数据

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("--------------------------------");

//遍历方法二 迭代器

Iteratorit =ts.iterator();

while(it.hasNext()){

System.out.println(it.next());

}

}

}

二,补充

TreeSet集合实现了SortedSet接口, 可以对集合中元素进行自然排序, 要求集合中的元素必须是可比较的。

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 treeSet = new TreeSet<>(new Comparator() {

//在匿名内部类中重写接口的抽象方法

@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 treeSet22 = new TreeSet<>(treeSet);

System.out.println( treeSet22 );

//5) 使用TreeSet的无参构造, 没有指定Comparator比较器, 要求Person类实现Comparable接口

TreeSet treeSet33 = new TreeSet<>();

treeSet33.addAll(treeSet);

System.out.println( treeSet33);

}

}

TreeSet集合底层是TreeMap,向TreeSet集合添加元素,实际上是把该元素作为键添加到了底层TreeMap中,TreeSet集合实际上就是底层TreeMap的键的集合。

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 treeSet = new TreeSet<>(new Comparator() {

@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

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 实现使用Comparable按照我们指定的规则排序
下一篇:Java案例之HashMap集合存储学生对象并遍历
相关文章

 发表评论

暂时没有评论,来抢沙发吧~