treeset排序机制(TreeSet改变元素的值后还会重新排序吗)
treeset排序机制(TreeSet改变元素的值后还会重新排序吗)可以看到这里有句话就是说,根据通常在创建有序set时提供Comparator进行排序,并没有说明元素修改后就能给你排序,上面程序结果也说明了修改了元素的值并不会给你重新排序,那么有什么办法能够让它重新给我们排序呢?有两种方法,第一种方法是对原有的set对象进行重新排序,也就是在修改了元素的后面加上一句set=new TreeSet<Score>(new ArrayList<Score>(set));就可以重新排序了。第二种是改用List再使用Colections.sort()方法来对List进行排序。SortedSet的官方说明首先我们构造一个分数的类,我们按照分数的大小进行排序。为了测试,就不再另起个类,直接在本类写main方法进行测试,可以看到我们将成绩写进TreeSet里面的时候,TreeSet会帮我们默认从小到大排。那么,有一次我发现排在最先的(也就是最小的
我们知道Set和List的最大区别就是Set元素不可以重复,当然,这里的重复是指equals方法的返回值相等。在Set中有一个类是会自动排序的类叫TreeSet,如果插入元素,会默认按照升序排列,根据Comparable接口的compareTo的返回值确定排序的位置,而且comparator方法是来自SortedSet接口的。
TreeSet排序所用的方法
在SortedSet的接口里还有一个方法是first方法获取第一个元素,那么我们来修改一下第一个的值看下会怎么样呢?
测试的类
首先我们构造一个分数的类,我们按照分数的大小进行排序。为了测试,就不再另起个类,直接在本类写main方法进行测试,可以看到我们将成绩写进TreeSet里面的时候,TreeSet会帮我们默认从小到大排。那么,有一次我发现排在最先的(也就是最小的那个)成绩录入错了,我想改一下分数,虽然Set是没有下标,但是能取到第一个和最后一个的值,假设我现在改了的值比排在第二的85分大。那么,TreeSet是否还会帮我们默认排序吗?下面请看代码及结果:
修改第一个成绩在打印值
可以看到,我们把82分改成87分后打印出来的值并没有如我们所愿的再帮我们排序一次,那么这是为什么呢?我们来看下官方文档对SortedSet的说明:
SortedSet的官方说明
可以看到这里有句话就是说,根据通常在创建有序set时提供Comparator进行排序,并没有说明元素修改后就能给你排序,上面程序结果也说明了修改了元素的值并不会给你重新排序,那么有什么办法能够让它重新给我们排序呢?有两种方法,第一种方法是对原有的set对象进行重新排序,也就是在修改了元素的后面加上一句set=new TreeSet<Score>(new ArrayList<Score>(set));就可以重新排序了。第二种是改用List再使用Colections.sort()方法来对List进行排序。
那么说了这么多,什么时候要用TreeSet?什么时候用List排序比较好?
我觉得吧,对于不是经常变化的量,比如说基本数据类型和String类型等用TreeSet会比较好,因为基本上涉及不到经常修改,那么对于我们自己定义的那些类里面的变量,有可能经常要修改的,使用List排序会比较好一点。
好了今天就到这里了~~谢谢大家的收看~喜欢的关注一波~~明天开始准备附上我每天学习的十个单词,也是监督自己哈哈~~顺便复习复习~~