专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 List集合可以排序吗?

List集合可以排序吗?

更新时间:2019-08-30 10:36:49 来源:动力节点 浏览2277次

  

最近有小伙伴们问小编List集合可以排序吗?今天动力节点java培训机构小编专门针对此问题对大家介绍,List集合是可以排序的,List集合排序有两种方法,下面就随小编一起看看List集合排序的两种方法是什么呢?


首先讲一下Comparable接口和Comparator接口,以及他们之间的差异。有助于Collections.sort()方法的使用。


  1、Comparable自然规则排序


  //在自定义类Student里面实现Comparable接口,并重写抽象方法compareTo(Student o);


  //Collections.sort(集合);


先看一个简单的例子:


 public static void main(String[] args) {  

        Listnums = new ArrayList();  

            nums.add(3);  

            nums.add(5);  

            nums.add(1);  

            nums.add(0);  

            System.out.println(nums);  

            Collections.sort(nums);  

            System.out.println(nums);  



  输出结果:


  [3, 5, 1, 0]


  [0, 1, 3, 5]


  稍微复杂的List里面放一个复杂的对象


package core.java.collection.collections;  

  

public class User implements Comparable{  

      

    private int score;  

      

    private int age;  

      

    public User(int score, int age){  

        super();  

        this.score = score;  

        this.age = age;  

    }  

  

    public int getScore() {  

        return score;  

    }  

  

    public void setScore(int score) {  

        this.score = score;  

    }  

  

    public int getAge() {  

        return age;  

    }  

  

    public void setAge(int age) {  

        this.age = age;  

    }  

  

    @Override  

    public int compareTo(User o) {  

        int i = this.getAge() - o.getAge();//先按照年龄排序  

        if(i == 0){  

            return this.score - o.getScore();//如果年龄相等了再用分数进行排序  

        }  

        return i;  

    }  

      

}  

  

public static void main(String[] args) {  

        Listusers = new ArrayList();  

        users.add(new User(78, 26));  

        users.add(new User(67, 23));  

        users.add(new User(34, 56));  

        users.add(new User(55, 23));  

        Collections.sort(users);  

        for(User user : users){  

            System.out.println(user.getScore() + "," + user.getAge());  

        }  

}


  输出结果:


  55,23


  67,23


  78,26


  34,56


  我们会发现sort(List)方法中List中的T必须实现Comparable接口,然后实现compareTo()方法,该方法的返回值0代表相等,正数表示大于,负数表示小于;为什么在简单例子中没有看到实现Comparable接口呢?是因为Integer类其实自己已经实现了Comparable接口,Java已经给我们做好了。


  2、Comparator专门规则排序(l临时排序)


  //新建一个实现了Comparator接口的类,并重写抽象方法compare(Student o1, Student o2);


  //Collections.sort(集合,实现了Comparator接口的类的实例化对象);


  Collections提供的第二种排序方法sort(Listlist, Comparator c)


  先看例子:


package core.java.collection.collections;  

  

public class Students {  

      

    private int age;  

    private int score;  

      

    public Students(int age, int score){  

        super();  

        this.age = age;  

        this.score = score;  

    }  

      

    public int getAge() {  

        return age;  

    }  

    public void setAge(int age) {  

        this.age = age;  

    }  

    public int getScore() {  

        return score;  

    }  

    public void setScore(int score) {  

        this.score = score;  

    }  

}  

public static void main(String[] args) {  

        Liststudents = new ArrayList();  

        students.add(new Students(23, 100));  

        students.add(new Students(27, 98));  

        students.add(new Students(29, 99));  

        students.add(new Students(29, 98));  

        students.add(new Students(22, 89));  

        Collections.sort(students, new Comparator() {  

  

            @Override  

            public int compare(Students o1, Students o2) {  

                int i = o1.getScore() - o2.getScore();  

                if(i == 0){  

                    return o1.getAge() - o2.getAge();  

                }  

                return i;  

            }  

        });  

        for(Students stu : students){  

            System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());  

        } 

}   


  输出结果:


  score:89:age22


  score:98:age27


  score:98:age29


  score:99:age29


  score:100:age23


  从上面的例子我们可以看出Students类没有实现Comparable接口,只是在sort()方法中多传入一个参数,只不过该参数是一个接口我们需要实现其compare方法。


以上就是动力节点java培训机构介绍的“List集合可以排序吗?”的内容,希望能够帮助到大家,如有疑问,请在线咨询,有专业老师随时为你服务。


相关免费视频教程推荐


List集合可以排序视频教程下载:http://www.bjpowernode.com/xiazai/2486.html



提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>