通过Comparator和Comparable对集合进行排序

来源:互联网 发布:win7开机优化加速 编辑:程序博客网 时间:2024/06/07 04:07

在java编程和Android开发过程中,经常遇到需要对集合进行排序的情况,而Comparator就是专门为此设计的一个接口;如果集合里是实体类的话,那么使用Comparabale接口就更加方便了。

下面就说说这两个接口的使用方法。

Comparator :

假设有这么一个集合list:

List<int> list = new ArrayList<>();list.add(8);list.add(5);list.add(15);list.add(95);list.add(3);

然后写一个自定义Comparator接口:

Comparator<int> comparator = new Comparator<int>() {            @Override            public int compare(int a, int t1) {                if (a<t1) {                    return -1;                } else if (a>t1) {                    return 1;                } else {                    return 0;   //这里一定不要忘记了两者相等的情况                }            }        };

然后调用Collections的sort()方法即可:

 Collections.sort(list, comparator);

Comparable :

假设有这么一个实体类集合

List<Node> nodeList = new ArrayList<>();nodeList.add(new Node("Mike"11));nodeList.add(new Node("Jay",15));nodeList.add(new Node("Lucy",21));nodeList.add(new Node("Leo",8));

其中Node是一个实体类:
Node.java

public class Node{    private String name;    private int age;    Node(String name, int age) {        this.name = name;        this.age = age;    }}

类比较简单,只有一个name和age属性,现在需要对集合中的实体按照name字符的大小从小到大排序怎么办呢,这时候就轮到Comparable上场了(当然你还是可以用Comparator接口,一样的方法,只需要把参数换成Node类型就行了,这里示范用Comparable接口):

public class Node implements Comparable {    private String name;    private int age;    @Override    public int compareTo(Object o) {        int result;        result = this.name.compareTo(((Node) o).name);        //如果名字一样,则按照年龄大小排序        if (result == 0) {            return this.age - ((Node) o).age;        }else {            return i;        }    }    Node(String name, int age) {        this.name = name;        this.age = age;    }}

这里对类实现了Comparable接口,然后重写了comparaTo方法,根据name属性的字符串大小排序,若字符串相等,则按照age大小排序。实现了Comparable接口的类只需要执行以下方法即可以实现排序:

Collections.sort(nodeList);

对集合的操作除了排序之外,还涉及到一些替换,查找等一系列操作,都可以用Collections类实现。
关于Collections类的常用操作,请看我的下一篇博客。

0 0
原创粉丝点击