TreeSet类是Set接口的一个实现类,主要作用是用于对对象的排序以及确定存入对象的唯一性。给对象排序的方式有很多,比如一些基本类型int、String等类型就已经提供了很多排序的方法了,但是这并不说明TreeSet类就没有什么用了。在一些时候我们需要自定义一些类,同时需要对这个类的对象进行排序,那么这个时候我们就可以通过这个TreeSet类去自定义一个排序的条件。
本次有5名学生参加考试,当老师录入每名学生的成绩后,程序将按照从低到高的排列显示成绩。 此外, 老师可以查询本次考试是否有满分的学生存在,不及格的成绩有哪些,90分以上成绩的学生有几名。
下面使用TreeSet类来创建Set集合,完成学生成绩查询功能。具体的代码如下:
import java.util.Iterator;
import java.util.Scanner;
import java.util.SortedSet;
import java.util.TreeSet;
public class TEST {
public static void main(String[] args) {
TreeSet<Double>scores =new TreeSet <Double>(); //创建了一个TreeSet集合对象scores
Scanner input=new Scanner(System.in);
System.out.println("成绩如下:");
for (int i = 0; i < 5; i++) {
System.out.println("第"+(i+1)+"个学生的成绩");
double score =input.nextDouble();
scores.add(Double.valueOf(score));
}
Iterator<Double> it =scores.iterator(); //创建iterator对象
System.out.println("成绩从低到高的排序为:");
while(it.hasNext()) {
System.out.println(it.next()+"\t");
}
System.out.println("\n请输入需要查询的成绩:");
Double search =input.nextDouble();
if (scores.contains(search)) {
System.out.println("存在该成绩!");
}
else {
System.out.println("\n不存在该成绩!");
}
SortedSet<Double> score1=scores.headSet(60.0);
System.out.println("\n不及格的成绩有:");
for (int i = 0; i < score1.toArray().length; i++) {
System.out.println(score1.toArray()[i]+"\t");
}
System.out.println("\n90分以上的成绩有:");
SortedSet<Double> score2=scores.tailSet(90.0);
for (int i = 0; i < score2.toArray().length; i++) {
System.out.println(score2.toArray()[i]+"\t");
}
}
}
程序运行结果如下:
如上述代码,首先创建一个TreeSet 集合对象scores并向该集合中添加5个Double对象。接着使用while循环遍历scores集合对象,输出该对象中的元素,然后调用TreeSet类中的contains()方法获取该集合中是否存在指定的元素。最后分别调用TreeSet类中的headSet()方法和tailSet()方法获取不及格的成绩和90分以上的成绩。
注意:
在使用自然排序时只能向TreeSet集合中添加相同数据类型的对象,否则会抛出ClassCastException异常。如果向TreeSet集合中添加了一不Double类型的对象,则后面只能加Double对象,不能再添加其他类型的对象,例如String对象等。
附1
TreeSet类的常用方法:
附二
TreeSet类的常用构造方法: