Android 对集合对象排序(快排与实现接口排序)

对数组排序有很多方法,但是对集合排序一般都以自定义排序的为多,其实利用Collection的sort也是可以实现的。

一、 Collections.sort(list,comparator)

举个例子:
一个实体类User,这里用age属性大小来排序,return的结果>0是大于,<0就是小于。另外这里是降序,要升序就看将两个参数对调即可。

class RankComparator extends Comparator<User>{
    @Override  
    public int compare(Model lhs, Model rhs) {  
         // TODO Auto-generated method stub  
         return rhs.getAge() - lhs.getAge();  
    } 
}

利用这种方法排序就十分简单明了。

二、自定义快排

快排作为一种基础的排序算法,还是应该掌握一下的。
这里再举一个例子,这里使用的降序,升序的话只要将timeK与 timeI和timeJ比较的大小与号反一下就好了:

public static void rankUser(List users, int low, int high) {
        int i = low;
        int k = low;
        int j = high;
        int timeK = users.get(k).getAge();
        while (i < j) {
            for (; j != i; j--) {
                int timeJ = users.get(j).getAge();
                if (timeK < timeJ) {
                    // 右边有小于K的数就换位置
                    User user = users.get(j);
                    users.add(j, users.get(k));
                    users.remove(j + 1);
                    users.add(k, user);
                    users.remove(k + 1);
                    k = j;
                    break;
                }
            }
            for (; j != i; i++) {
                int timeI = users.get(i).getAge();
                if (timeK > timeI) {
                    // 左边有大于K的数就换位置
                    User user = users.get(i);
                    users.add(i, users.get(k));
                    users.remove(i + 1);
                    users.add(k, user);
                    users.remove(k + 1);
                    k = i;
                    break;
                }
            }
        }
        if (i > low) {
            rankUser(users, low, i - 1);
        }
        if (j < high) {
            rankUser(users, j + 1, high);
        }
    }

其实没有什么太大难度,只要理解快排的流程再加上递归就完事啦。

你可能感兴趣的:(android)