美文网首页
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 结构体排序 两个优先级排序

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