zoukankan      html  css  js  c++  java
  • 实现数据排序的几种方法

    查询语句指定数值排序
    结合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的数据做单独处理,把数据放到每天的最后面

  • 相关阅读:
    使用Razor视图引擎来生成邮件内容
    Asp .Net Core 2.0 登录授权以及多用户登录
    简单几步,提升.Net Core的开发效率
    百万数据测试 Entity Framework 到底有多慢
    纸壳CMS(ZKEACMS)体验升级,快速创建页面,直接在页面中修改内容
    ZKEACMS 配置使用 HTTPS
    使用 jQuery.Pin 垂直滚动时固定导航
    底层的增删查改
    关于hangfire的使用
    巧用 CSS 实现酷炫的充电动画
  • 原文地址:https://www.cnblogs.com/zengsong-restService/p/3666332.html
Copyright © 2011-2022 走看看