Collections 对List排序

 通过 Collections 中的 sort() 方法对 List 进行排序

-------------------------
Collections 中的sort方法:
tags 1:
static <T extends Comparable<? super T>>  void sort(List<T> list) 
根据元素的自然顺序 对指定列表按升序进行排序。

tags 2:
static <T> void  sort(List<T> list, Comparator<? super T> c) 
 根据指定比较器产生的顺序对指定列表进行排序。
-------------------------
提示:
List 特点
          1) 有序(按照元素添加顺序进行排列)
          2) 可重复
---------------------------------------------------------------------------------------
下面以 将 ArrayList中的元素进行排序为例


 一般来说,类中需要实现comparable接口,同时重写compareTo方法,才能确定排序方式
但 String、Integer、Double 等类都已完成了上述功能,故可直接使用,默认从小到大,字典序排序
如果自定义排序方式,则要创建比较器(通过匿名对象类)实现 Comparator接口,重写compare方法

1: 集合内元素为 Integer、String、Character等等

<span style="font-size:18px;">    List<String> list=new ArrayList<String> ();</span>
    第一种: 按照自然顺序排序
            Collections.sort(list);          
    第二种: 自定义排序方式    
            eg: 按照字典序的反序进行排序
            1)匿名对象类实现 Comparator 接口
            2)重写compare方法
<span style="font-size:18px;">            Collections.sort(new Comparator<String>(){
                @Override
                public int compare(String s1,String s2){
                    int num=Math.min(s1.length(), s2.length());
                    int i=0;
                    while(i<num){
                        int tmp=s2.charAt(i)-s1.charAt(i);
                        if(tmp!=0)
                            return tmp;
                        i++;
                    }
                    if(s1.length()!=s2.length()) return 1;
                      else return 0;
                    }


            });
</span>


2: 集合内元素为自定义类对象
  eg:集合内元素为 Student类
<span style="font-size:18px;">       List<Student> list=new ArrayList<Student> ();</span>
 方法 和 TreeSet 的三种实现方式相同
   1)自然排序(其实也是自定义)
          i: 在 Student类上实现Comparable接口 
<span style="font-size:18px;">class Student implements Comparable<Student>{}<span style="font-size:18px;">如果同时有自然排序和比较器排序,则为比较器排序中的方式</span>
</span>
          ii:重写 compareTo 方法

<span style="font-size:18px;">     Collections.sort(list);</span>
    2)创建比较器类
          i : 创建比较器类 MyComparator 实现 Comparator 接口
           
<span style="font-size:18px;">  public class MyComparator implements Comparator<Student>{}</span>

          ii: 重写 compare 方法

<span style="font-size:18px;">          Collections.sort(list,MyComparator);</span>

    3)创建匿名对象类
<span style="font-size:18px;">           Collections.sort(new Comparator<Student>{
               @Override
               public int compare(Student s1,Student s2){
                   ...
               }
           });</span>
注意:
     上述这样做的好处
    通过List集合可以存储重复元素,通过Collections的sort方法进行排序,还能自定义排序方式
    等同于 弥补了 TreeSet 集合元素不能重复的缺点,弥补了 List 集合不能排序的缺点
    结合了两者的优点,使得排序更加自由,限制缩小


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值