Android(安卓)对集合对象排序(快排与实现接口排序)
16lz
2021-01-26
对数组排序有很多方法,但是对集合排序一般都以自定义排序的为多,其实利用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 list排序
- android 抽屉 效果
- (三)Kotlin 高阶函数
- Android(安卓)API:Activity.managedQuery()
- Android面试题算法篇
- Activity(启动模式) Activity(退出)
- Android中文联系人排序及检索补丁的原理(090819更新)
- Android(安卓)Java List 排序
- Android(安卓)GreenDao使用(二)增删改查