美文网首页
java 结构体排序 两个优先级排序

java 结构体排序 两个优先级排序

作者: 沙漠里de小孩子 | 来源:发表于2020-03-22 23:02 被阅读0次

工作快两年了,慢慢觉得算法是真重要,不是为了面试刷算法重要,而是在刷题的过程中慢慢形成的这种思维,遇到问题首先思考有几种解决方案,这些解决方案分别都有什么优缺点,算法代价是多少,时间代价和空间代价是否都能接受,我不是计算机科班出身,所以一开始没有接受到正确的教育,没有形成编程思维三观,以前是觉得能解决问题就ok了,但是这样其实是不对的。

                                                                                                            ——碎碎念


背景:

需要显示手机里的应用、当前占用的内存和最近一次使用的时间这样的三个信息到界面上,要按照占用的内存从大到小排序,如果占用的内存一样,就按照内存的大小排;或者按照最近一次使用的时间排序,如果最近使用的时间一样,就按照内存的大小排。

由于应用的包名和对应的其他信息不是一一映射关系,所以不能用普通的key value型数据结构保存和排序。考虑到数据的可扩展性和存储显示,使用结构体实现。

java的代码实现如下。


package sort;

import java.util.Arrays;

import java.util.Comparator;

import java.util.Scanner;

public class SortByTimeOrSize {

//结构体的定义

public static class stu implements Comparable{

        long lastUsedTime;//与现在的时间差,时间差越大,代表很久没有用,往前排

        long appTotalSize;

        String packageName;

        stu(){}//无参构造

        stu(long time,long size,String name){

            this.lastUsedTime = time;

            this.appTotalSize = size;

            this.packageName = name;

        }

@Override

public int compareTo(Object o) {

// TODO Auto-generated method stub

return 0;

}

    }

    public static void main(String[] args) {

        // TODO Auto-generated method stu

//结构体排序 按照最近使用的时间排序(这里的时间代表当前时间-上次使用的时间,是时间差,所以值越大,表示上次使用的时间越早)

Comparator<stu> cmpByTime =new Comparator<stu>(){

    public int compare(stu a,stu b) {

    if(a.lastUsedTime != b.lastUsedTime)

    return (int) (b.lastUsedTime-a.lastUsedTime);//按时间降序

    else return (int) (b.appTotalSize-a.appTotalSize);//如果时间相等,按空间大小升序

    }

    };

//结构体排序 按照空间占用内存大小排序

Comparator<stu> cmpBySize =new Comparator<stu>(){

    public int compare(stu a,stu b) {

    if(a.appTotalSize != b.appTotalSize)

    return (int) (b.appTotalSize-a.appTotalSize);//按占用空间大小降序

    else return (int) (b.lastUsedTime-a.lastUsedTime);//如果空间相等,按时间升序

    }

    };

        stu[] no = new stu[10];

        no[0] = new stu(9996,8505,"com.wenshy.zero");

        no[1] = new stu(9996,3264,"com.wenshy.one");

        no[2] = new stu(9996,8506,"com.wenshy.two");

        no[3] = new stu(9996,4565,"com.wenshy.three");

        no[4] = new stu(9996,8777,"com.wenshy.four");

        no[5] = new stu(1584,9694,"com.wenshy.five");

        no[6] = new stu(9997,9696,"com.wenshy.six");

        no[7] = new stu(1584,9697,"com.wenshy.seven");

        no[8] = new stu(9998,9699,"com.wenshy.eight");

        no[9] = new stu(1584,9699,"com.wenshy.nine");

        //按空间排:8 9 7 6 5 4 2 0 3 1

        //按时间排:8 6 4 2 0 3 1 9 7 5

        Arrays.sort(no,cmpBySize);//调用对应方法 进行排序

        for(int i = 0;i < no.length;i++){

            System.out.println(" time:"+no[i].lastUsedTime+" size:"+no[i].appTotalSize+" name:"+no[i].packageName);

        }

        return;

    }

}

目前的实现方案就是这样,有没有更好的还在思考。

相关文章

  • java 结构体排序 两个优先级排序

    工作快两年了,慢慢觉得算法是真重要,不是为了面试刷算法重要,而是在刷题的过程中慢慢形成的这种思维,遇到问题首先思考...

  • 学习acm组ppt的笔记1

    结构体 memset对结构体的支持 主要是下面两句 选择排序&插入排序 这两个排序总是搞混选择排序:把第i趟最大/...

  • 第4章 结构体

    1、排序 算法分析 用结构体存储,并进行排序 时间复杂度 Java 代码 2、成绩排序 算法分析 先对分数从小到大...

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 杭电ACM-2020

    题目: 代码: 注意:此题为结构体排序 对 绝对值数列的排序的典型题目!!!

  • 面试知识点

    排序冒泡排序快速排序选择排序插入排序二路归并 查找二分查找 排序和查找的java实现 java语言Java字符串字...

  • java排序方法资料

    java排序,效率高的是哪种排序方法 JAVA快速排序(高效) java中常用的几种排序算法 相关代码: /* *...

  • Java比较器(对象排序)

    Java实现排序的方式 自然排序:java.lang.Comparable 定制排序:java.lang.Comp...

  • 基数排序

    基数排序是一种可以按优先级排序的排序方法,例如扑克牌或者麻将的排序,先按照花色排序,再按照点数排序。 描述: 1、...

  • 如何搭建产品管理优先排序框架?

    本文笔者将从两个方面——项目之间的优先级,以及项目工作之间的优先级,来讲述:如何搭建产品管理优先排序框架?优先排序...

网友评论

      本文标题:java 结构体排序 两个优先级排序

      本文链接:https://www.haomeiwen.com/subject/jpebyhtx.html