zoukankan      html  css  js  c++  java
  • java Collections.sort()实现List排序的默认方法和自定义方法

    1.java提供的默认list排序方法

    主要代码:

    List<String> list = new ArrayList();list.add("刘媛媛");

    list.add("王硕");
    list.add("李明");
    list.add("刘迪");
    list.add("刘布");

    //升序
    Collections.sort(list,Collator.getInstance(java.util.Locale.CHINA));//注意:是根据的汉字的拼音的字母排序的,而不是根据汉字一般的排序方法
    for(int i=0;i<list.size();i++)
    {
        System.out.print(list.get(i));
    }
    System.out.println("");

    //降序
    Collections.reverse(list);//不指定排序规则时,也是按照字母的来排序的
    for(int i=0;i<list.size();i++)
    {
         System.out.print(list.get(i));
    }

    输出结果:

    李明刘布刘迪刘媛媛王硕
    王硕刘媛媛刘迪刘布李明

    2.自定义的排序规则:

    第一种是model类实现Comparable接口,重写重写int compareTo(Object o)方法

                model类:

    public class StudentDTO implements Comparable
    {
     private String name;
     private int age;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
         this.name = name;
    }

    public ObjType getType()
    {
        return type;
    }

    public void setAge(int age)
    {
         this.age= age;
    }

    @Override
    public int compareTo(Object o)
    {

           StudentDTO sdto = (StudentDTO)o;

           int otherAge = sdto.getAge();
          // note: enum-type's comparation depend on types' list order of enum method
          // so, if compared property is enum-type ,then its comparationfollow ObjEnum.objType order


          return this.age.compareTo(otherAge);
    }
    }

               主方法:           

    public static void main(String[] args)
    {
          List<StudentDTO> studentList = new ArrayList();

          StudentDTO s1 = new StudentDTO ();

          s.setName("yuanyuan");

          s.setAge(22);

          studentList.add(s1);

                      StudentDTO s1 = new StudentDTO ();

                      s.setName("lily");

                      s.setAge(23);

                      studentList.add(s2);

                      Collections.sort(studentList);  //按照age升序 22,23,

                     Collections.reverse(studentList);  //按照age降序 23,22   

    }

    第二种是比较器类实现Comparator接口,重写int compare(Object o1, Object o2)方法;

               model类:           

    public class StudentDTO implements Comparable
    {
         private String name;
         private int age;

         public String getName()
         {
             return name;
         }

         public void setName(String name)
        {
             this.name = name;
         }

         public ObjType getType()
         {
             return type;
         }

         public void setAge(int age)
         {
             this.age= age;
         }

               比较器类:

    class MyCompartor implements Comparator
    {
         @Override
         public int compare(Object o1, Object o2)
        {

               StudentDTO sdto1= (StudentDTO )o1;

               StudentDTO sdto2= (StudentDTO )o2;

               return sdto1.getAge.compareTo(stdo2.getAge())

        }
    }

               主方法:

    public static void main(String[] args)
    {
          List<StudentDTO> studentList = new ArrayList();

          StudentDTO s1 = new StudentDTO ();

          s.setName("yuanyuan");

          s.setAge(22);

          studentList.add(s1);

          StudentDTO s1 = new StudentDTO ();

          s.setName("lily");

          s.setAge(23);

          studentList.add(s2);

          MyComparetor mc = new MyComparetor();

          Collections.sort(studentList,mc);     //按照age升序 22,23,

          Collections.reverse(studentList,mc);    //按照age降序 23,22   

    }

    附注:

    1.对于数组的排序方法如下:

    String[] names = {"王林",  "杨宝", "李镇", "刘迪", "刘波"};  
    Arrays.sort(names, com.ibm.icu.text.Collator.getInstance(com.ibm.icu.util.ULocale.SIMPLIFIED_CHINESE));//升序;   
    System.out.println(Arrays.toString(names));      

    2.对于汉字的排序:可以尝试使用ICU4J会得到更好的结果,特别是姓为某些生僻字的时候,

    用com.ibm.icu.text.Collator替换java.text.Collator,用com.ibm.icu.util.ULocale替换java.util.Locale

    3.对于枚举类型的enum1.compareTo(enum2)是按照枚举类型值在定义时的先后顺序比较的,越后面的越大,

    而不是按照值的字母先后顺序比较的。

  • 相关阅读:
    hdu6229 Wandering Robots 2017沈阳区域赛M题 思维加map
    hdu6223 Infinite Fraction Path 2017沈阳区域赛G题 bfs加剪枝(好题)
    hdu6438 Buy and Resell 买卖物品 ccpc网络赛 贪心
    hdu6441 Find Integer 求勾股数 费马大定理
    bzoj 1176 Mokia
    luogu 3415 祭坛
    bzoj 1010 玩具装箱
    bzoj 3312 No Change
    luogu 3383【模板】线性筛素数
    bzoj 1067 降雨量
  • 原文地址:https://www.cnblogs.com/jmsjh/p/7504848.html
Copyright © 2011-2022 走看看