首页

提供两种方式实现数据序列集合快速排序(代码示例)

标签:排序,Comparator,Collections,集合排序,Comparable,compareTo,TreeSet     发布时间:2015-08-11   

一、前言

对于对象序列集合经常需要根据条件(字符长度,年龄大小等)来排序,然后对有序的数据再进行依次处理,我们可以借助JDK提供的java.util.Collections公共结合处理类Collections.sort方式或者通过将序列集合转换为TreeSet来处理

二、代码示例

第一种方式

通过Collections.sort方式将字符序列按照字符从多到少进行排序,示例如下

public static void main(String[] args) {@b@        @b@        List<String> sl=new ArrayList<String>();@b@        sl.add("abcde");@b@        sl.add("abc");@b@        sl.add("ab");@b@        sl.add("abcd");@b@        @b@        Collections.sort(sl, new Comparator<String>() {@b@             @Override@b@                public int compare(String s1, String s2) {@b@                    return s2.length() - s1.length();@b@                }@b@        });@b@        @b@        for(String s:sl){@b@            System.out.println(s);@b@        }@b@        @b@    }

运行结果如下

abcde@b@abcd@b@abc@b@ab

第二种方式

通过JDK本身提供有序序列集合类来实现如TreeSet,同样实现上面字符排序,代码如下

public static void main(String[] args) {@b@        TreeSet<String> sl=new TreeSet<String>();@b@        sl.add("abcde");@b@        sl.add("abc");@b@        sl.add("ab");@b@        sl.add("abcd");@b@        @b@        int i=sl.size();@b@        while(--i>-1){@b@            System.out.println(sl.pollLast());@b@        }@b@    }

运行结果和上面一致,对于自定义类集合进行排序,需要先实现java.lang.Comparable<T>接口,同时实现接口compareTo方法,举例如下(根据人的年龄进行排优先级)

public class Persion implements Comparable<Persion> {@b@    @b@    private String  name; @b@    @b@    private int age;@b@@b@    @Override@b@    public int compareTo(Persion paramT) {@b@        // TODO Auto-generated method stub@b@        return this.getAge()-paramT.getAge();@b@    }@b@    @b@    public String getName() {@b@        return name;@b@    }@b@@b@    public void setName(String name) {@b@        this.name = name;@b@    }@b@@b@    public int getAge() {@b@        return age;@b@    }@b@@b@    public void setAge(int age) {@b@        this.age = age;@b@    }@b@@b@}