当前位置: 首页 > news >正文

实现数据排序的几种方法

查询语句指定数值排序
结合java代码,查出查询期间有数据的最近一天数据,拿此数据,用order by,field指定排序,结果集里有的数据,在此函数中一定要存在,否则排序失效
select queryDate,modelName from tables
ORDER BY queryDate DESC,field(modelName,'model1','model3','model2','model4')

java 代码
说 Collections sort之前先来说说Collection和Collections的区别
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。
java.util.Collections 是针对集合类的一个帮助类,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作。

事实上Collections.sort() 就是实现的Array.sort,
底层使用legacyMergeSort(a):归并排序和ComparableTimSort.sort():Timsort排序
备注:
Timsort排序是结合了合并排序(merge sort)和插入排序(insertion sort)而得出的排序算法。

Timsort的核心过程

TimSort 算法为了减少对升序部分的回溯和对降序部分的性能倒退,将输入按其升序和降序特点进行了分区。排序的输入的单位不是一个个单独的数字,而是一个个的块-分区。其中每一个分区叫一个run。针对这些 run 序列,每次拿一个 run 出来按规则进行合并。每次合并会将两个 run合并成一个 run。合并的结果保存到栈中。合并直到消耗掉所有的 run,这时将栈上剩余的 run合并到只剩一个 run 为止。这时这个仅剩的 run 便是排好序的结果。

综上述过程,Timsort算法的过程包括

(0)如何数组长度小于某个值,直接用二分插入排序算法

(1)找到各个run,并入栈

(2)按规则合并run

List<CommonRoomsBean> commonRoomsBeanList=new ArrayList<>();
CommonRoomsBean cb1=new CommonRoomsBean();
cb1.setName("kitchen");
cb1.setValue((long)21261);
commonRoomsBeanList.add(cb1);
CommonRoomsBean cb2=new CommonRoomsBean();
cb2.setName("others");
cb2.setValue((long)50020);
commonRoomsBeanList.add(cb2);
CommonRoomsBean cb3=new CommonRoomsBean();
cb3.setName("other");
cb3.setValue((long)47427);
commonRoomsBeanList.add(cb3);
CommonRoomsBean cb4=new CommonRoomsBean();
cb4.setName("bedroom");
cb4.setValue((long)61286);
commonRoomsBeanList.add(cb4);
CommonRoomsBean cb5=new CommonRoomsBean();
cb5.setName("livingroom");
cb5.setValue((long)51508);
commonRoomsBeanList.add(cb5);
/**
* Others放最后,
* 然后按照value排序,倒序
*
* 如果指定的数与参数相等返回0。
* 如果指定的数小于参数返回 -1。
* 如果指定的数大于参数返回 1。
*/
Collections.sort(commonRoomsBeanList, new Comparator<CommonRoomsBean>() {
@Override
public int compare(CommonRoomsBean u1, CommonRoomsBean u2) {
if ("others".equals(u1.getName())) {
return 1;
} else {
return u2.getValue().compareTo(u1.getValue());
}
}
});
System.out.println(commonRoomsBeanList);
//输出数据,并没有实现Others放最后的排序,动态数据的情况下,两个数据比较大于1的有多个,显然会有多个1
//重定义compare比较值
//在输出数据结果时对others的数据做单独处理,把数据放到每天的最后面

转载于:https://www.cnblogs.com/zengsong-restService/p/3666332.html

相关文章:

  • Laravel整合Bootstrap 4的完整方案
  • Android存储方式之SQLite的使用
  • Redis项目实战 .net StackExchange.Redis
  • [Json.net]快速入门
  • getRequestURI,getRequestURL的区别
  • 2018年测试状况调查
  • 一个CCIE的梦想(转)
  • 如何快速找到多个字典中的公共键(key)
  • form表单的onclick与submit提交顺序
  • Linux下的五种错误配置
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • 关于研发成本的一些思考
  • ElasticSearch学习(9)-Java接口查询操作
  • 转载:C/C++关于string.h头文件和string类
  • 开源USM之HIDS ossec
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Angular数据绑定机制
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JS字符串转数字方法总结
  • Laravel 实践之路: 数据库迁移与数据填充
  • mysql 数据库四种事务隔离级别
  • Promise面试题,控制异步流程
  • Service Worker
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 前端性能优化--懒加载和预加载
  • 如何进阶一名有竞争力的程序员?
  • 深度学习中的信息论知识详解
  • 详解NodeJs流之一
  • 一个SAP顾问在美国的这些年
  • 鱼骨图 - 如何绘制?
  • 原生js练习题---第五课
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​VRRP 虚拟路由冗余协议(华为)
  • (vue)页面文件上传获取:action地址
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转)memcache、redis缓存
  • (转载)Linux 多线程条件变量同步
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET4.0并行计算技术基础(1)
  • .NET的数据绑定
  • .NET连接MongoDB数据库实例教程
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • @AliasFor注解
  • [.NET]桃源网络硬盘 v7.4
  • [20170713] 无法访问SQL Server
  • [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)
  • [C#] 我的log4net使用手册