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

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

    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 cmpBySize =new Comparator(){

    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 结构体排序 两个优先级排序)