• 技术文章 >Java >java教程

    java Collections.sort()实现List排序的默认方法和自定义方法

    巴扎黑巴扎黑2017-06-26 11:13:51原创715
    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)是按照枚举类型值在定义时的先后顺序比较的,越后面的越大,

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


    以上就是java Collections.sort()实现List排序的默认方法和自定义方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:SpringBoot入门第一章:Hello World 下一篇:win7下tomcat5.5无法通过ip和127.0.0.1访问的解决方法
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一招教你使用java快速创建Map(代码分享)• PlayFramework 完整实现一个APP(十一)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网