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<User> 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);
        }
    }

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值