ArrayList自定义排序

来源:互联网 发布:前端数据可视化 编辑:程序博客网 时间:2024/06/08 05:10

ArrayList实现自定义排序

这几天练习的时候想着学习一下List的使用,从ArrayList入手。

正好需要完成一个排序,之前在看常用类的方法的时候知道ArrayList类下有一个现成的sort()方法,于是就想拿来使用。

不过之后发现这个sort()方法用来排序基本类型变量还可以,但是当ArrayList中存储的是引用类型变量时就不好用了,于是决定进一步研究看看。

于是顺便把Collections.sort的用法也给学习了一下。


如果只需要将基本数据类型进行正序排列,我们只需直接调用Collections.sort()或List.sort()就可以了,两者实现的都是从小到大排序。

public class FirstJava {    public static void main(String[] args) {        List<Integer> intList = Arrays.asList(2, 3, 1);        Collections.sort(intList);        intList.sort(null);        for (Integer print : intList) {            System.out.println(print);        }    }}// 1// 2// 3

如果想要由大到小进行排序,我们就绪要自定义一个比较器。

public class FirstJava {    public static void main(String[] args) {        List<Integer> intList = Arrays.asList(2, 3, 1);        Collections.sort(intList, new Comparator<Integer>() {            @Override            public int compare(Integer o1, Integer o2) {                return o2.compareTo(o1);            }        });        for (Integer print : intList) {            System.out.println(print);        }    }}// 3// 2// 1

代码中的匿名内部类就是我们需要的构造器,通过compareTo方法,当o2比o1大时返回一个大于0的数,小时返回一个小于0的数。对于List.sort(c);同样的

public class FirstJava {    public static void main(String[] args) {        List<Integer> intList = Arrays.asList(2, 3, 1);        intList.sort( new Comparator<Integer>() {            @Override            public int compare(Integer o1, Integer o2) {                return o2.compareTo(o1);            }        });        for (Integer print : intList) {            System.out.println(print);        }    }}// 3// 2// 1

但是上述这些都是对基本数据类型变量进行排序,那么我们怎么对其进行扩展使可以再各种地方使用sort呢?

    public static void sortByAge(ArrayList<CompanyMember> enterpriseMembers) {        Collections.sort(enterpriseMembers,new SortByAge());        enterpriseMembers.sort(new SortByAge());        for(CompanyMember tempForShow : enterpriseMembers) {            System.out.println(tempForShow.toString());        }    }

这是我练习时使用的一个方法,实现把公司成员依年龄进行排序。

class SortByAge implements Comparator {    @Override    public int compare(Object o1, Object o2) {        CompanyMember emp1 = (CompanyMember) o1;        CompanyMember emp2 = (CompanyMember) o2;        return ((Integer) emp1.getAge()).compareTo((Integer) (emp2.getAge()));    }}

这是我自定义的一个比较器,实现Comparator接口来完成需要的自定义比较

两者结合就可以了。


原创粉丝点击