打字猴:1.700445655e+09
1700445655
1700445656 身高:175
1700445657
1700445658 身高:180
1700445659
1700445660 这没有问题,随着时间的推移,身高175cm的人长高了10cm,而180cm却保持不变,那排序的位置应该改变一下吧,看代码:
1700445661
1700445662 public static void main(String[]args){
1700445663
1700445664 SortedSet<Person>set=new TreeSet<Person>();
1700445665
1700445666 //身高180CM
1700445667
1700445668 set.add(new Person(180));
1700445669
1700445670 //身高175CM
1700445671
1700445672 set.add(new Person(175));
1700445673
1700445674 //身高最矮的人大变身
1700445675
1700445676 set.frst().setHeight(185);
1700445677
1700445678 for(Person p:set){
1700445679
1700445680 System.out.println(“身高:”+p.getHeight());
1700445681
1700445682 }
1700445683
1700445684 }
1700445685
1700445686 找出身高最矮的人,也就是排在第一个位的人,然后修改一下身高值,我们猜想一下输出结果是什么?重新排序了?看输出:
1700445687
1700445688 身高:185
1700445689
1700445690 身高:180
1700445691
1700445692 很可惜,竟然没有重新排序,偏离了我们的预期。这正是下面要说明的问题,SortedSet接口(TreeSet实现了该接口)只是定义了在给集合加入元素时将其进行排序,并不能保证元素修改后的排序结果,因此TreeSet适用于不变量的集合数据排序,比如String、Integer等类型,但不适用于可变量的排序,特别是不确定何时元素会发生变化的数据集合。
1700445693
1700445694 原因知道了,那如何解决此类重排序问题呢?有两种方式:
1700445695
1700445696 (1)Set集合重排序
1700445697
1700445698 重新生成一个Set对象,也就是对原有的Set对象重排序,代码如下:
1700445699
1700445700 public static void main(String[]args){
1700445701
1700445702 SortedSet<Person>set=new TreeSet<Person>();
1700445703
1700445704 //身高180CM
[ 上一页 ]  [ :1.700445655e+09 ]  [ 下一页 ]