JAVA学习基础Set类

TreeSet类
TreeSet元素唯一,且可以对元素进行排序
底层数据结构是二叉树
排序,自然排序和比较器排序
我们先来看下输入一堆乱七八糟的数后直接打印输出后的结果

TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(21);
treeSet.add(1230);
treeSet.add(0);
treeSet.add(10);
treeSet.add(45);
System.out.println(treeSet);
他的结果是[0, 10, 21, 45, 1230]//由此可见他输进去的元素是唯一的,而且可以对元素进行排序

如果我们存进去的是一个对象的话怎么排序呢,如果直接遍历或者打印输出又是什么结果呢,我们来看一下

在这里插入图片描述
在这里插入图片描述

这个输出的时候会出现
Exception in thread “main” java.lang.ClassCastException: Student cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1294)
at java.util.TreeMap.put(TreeMap.java:538)
at java.util.TreeSet.add(TreeSet.java:255)
这个意思就是他无法排序,因为你里面了写的是一个对象,对象用Comparable无法比较,所以这个时候我们就要通过重写的方式来进行比较
那么怎么重写呢?
我们有两种重写的方法,一种是自然排序下的重写,一种是用比较器来排序,接下来我给大家演示下怎么进行重写
首先我们要直到Comparable返回的是数字,如果要正向排序,就要返回1,如果要反向排序,就要返回-1,如果有重复的返回0,则删除一个重复项

就拿我上面写的为例,拥有Student类
自然排序
自然排序就是在t无参构造的前提下进行的排序
也就是要在Student类里面来进行对方法Comparable进行重写
重写方法如下
在这里插入图片描述

比较器排序就是对new TreeSet的时候,在参数上加入比较器,来进行对Comparator的重写,重写方法如下
在这里插入图片描述
用比较器来排序就不需要对自定义的类进行加接口的操作了,也不用在自定义类里对Comparable进行重写了。这里num2如果返回的是正1,则对他正向排序,如果是-1,对他进行反向排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值