java Set集合,TreeSet类详细介绍

KLQ 2020-08-25 15:14:37 java常见问答 8894

之前给大家介绍一下java Set集合,HashSet类的内容,那么下面要给大家介绍的就是java Set集合,TreeSet类的内容,一起来了解一下吧!

TreeSet类同时实现了Set接口和SortedSet接口。

SortedSet接口是Set接口的子接口,能够实现对集合进行自然排序,所以的话,使用TreeSet类实现的Set接口默认情况下是自然排序的,这里的自然排序指的是升序排序。

TreeSet只能对实现了Comparable接口的类对象进行排序,因为,Comparable接口中有一个 compareTo(Object o) 方法用于比较两个对象的大小。

例:

a.compareTo(b),假如,a 和b相等,那么,该方法返回0;

假如,a大于b,那么,该方法返回大于0的值;

假如,a小于b,那么,该方法返回小于 0 的值。

下面介绍了一下JDK类库中实现Comparable接口的类,以及这些类对象的比较方式。

实现Comparable接口类对象的比较方式:

实现Comparable接口类对象的比较方式

TreeSet类除了实现Collection接口的所有方法之外,还提供下面的方法。

TreeSet类的常用方法:

实现Comparable接口类对象的比较方式

这里要稍微的注意一下,看起来方法有很多,但是实际上,是很简单的。

TreeSet中的元素是有序的,所以增加了访问第一个、前一个、后一个、最后一个元素的方法,并提供了3个从TreeSet中截取子TreeSet的方法。

示例:

这次,有五个学生来参加考试,老师录入每一个学生的成绩之后,程序会按照从低到高的排列顺序显示学生成绩,除此之外,老师能够查询这次考试是不是有满分的学生存在,不及格的成绩有哪些,90分以上的学生有几名。

下面的话,使用TreeSet类来创建Set集合,完成学生成绩查询功能。

首先创建一个TreeSet集合对象 scores,并向该集合中添加5个Double对象,之后,使用while循环遍历scores集合对象,输出这个对象中的元素,之后,调用TreeSet类中的contains()方法获取这个集合中是否存在指定的元素。

最后分别调用TreeSet类中的headSet()方法和tailSet()方法获取不及格的成绩和90分以上的成绩。

代码实现:

public class Test08
{
    public static void main(String[] args)
    {
        TreeSet < Double > scores = new TreeSet < Double > (); // 创建 TreeSet 集合
        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();
            // 将学生成绩转换为Double类型,添加到TreeSet集合中
            scores.add(Double.valueOf(score));
        }
        Iterator < Double > it = scores.iterator(); // 创建 Iterator 对象
        System.out.println("学生成绩从低到高的排序为:");
        while (it.hasNext())
        {
            System.out.print(it.next() + "\t");
        }
        System.out.println("\n请输入要查询的成绩:");
        double searchScore = input.nextDouble();
        if (scores.contains(searchScore))
        {
            System.out.println("成绩为: " + searchScore + " 的学生存在!");
        }
        else
        {
            System.out.println("成绩为: " + searchScore + " 的学生不存在!");
        }
        // 查询不及格的学生成绩
        SortedSet < Double > score1 = scores.headSet(60.0);
        System.out.println("\n不及格的成绩有:");
        for (int i = 0; i < score1.toArray()
            .length; i++)
        {
            System.out.print(score1.toArray()[i] + "\t");
        }
        // 查询90分以上的学生成绩
        SortedSet < Double > score2 = scores.tailSet(90.0);
        System.out.println("\n90 分以上的成绩有:");
        for (int i = 0; i < score2.toArray()
            .length; i++)
        {
            System.out.print(score2.toArray()[i] + "\t");
        }
    }
}

运行该程序,执行结果:

------------学生成绩管理系统-------------
第1个学生成绩:
53
第2个学生成绩:
48
第3个学生成绩:
85
第4个学生成绩:
98
第5个学生成绩:
68
学生成绩从低到高的排序为:
48.0    53.0    68.0    85.0    98.0   
请输入要查询的成绩:
90
成绩为: 90.0 的学生不存在!
不及格的成绩有:
48.0    53.0   
90 分以上的成绩有:
98.0

注意一下:

在使用自然排序时只能向TreeSet集合中添加相同数据类型的对象,否则的话就会抛出ClassCastException异常。

假如,向TreeSet集合中添加了一个Double类型的对象,那么,后面只能添加Double对象,不可以再添加其他类型的对象,例如String对象等。

关于java Set集合,TreeSet类方面的一些知识,你都了解了吧,更多java Set集合的java基础内容,请继续来本站进行了解和学习吧。

推荐阅读:

java set集合,set集合常用方法有哪些?

hashset和treeset区别是什么?有什么区别?

java中set方法实例,java中set用法