TOP N (java)

来源:互联网 发布:dns 一个域名多个ip 编辑:程序博客网 时间:2024/06/05 08:03


返回最大的N个值


//返回最大n    static List<AlarmMessage> getTopN(int n,List<AlarmMessage> list){        if(list == null || list.isEmpty() || n < 1){            return new ArrayList<AlarmMessage>();        }        if(n > list.size()){            n = list.size();        }        try{            //选出Id最大的n条,也就是最新的n条message            AlarmMessage[] arr = new AlarmMessage[n];            for(AlarmMessage alarmMessage:list){                if(arr[0] == null){//数组还没填满                    if(arr[arr.length-1] == null){//空数组                        arr[arr.length-1] = alarmMessage;//放在最后                        continue;                    }else{//非空数组                        for(int j = 0;j<arr.length-1;j++){//整体往前移动一格                            arr[j] = arr[j+1];                        }                        arr[arr.length-1] = null;//最后一个设置为null                    }                }                for(int i=arr.length-1;i>-1;i--){                    if(arr[i] == null){                        if(i == arr.length-1){//最后一个为null,说明是数组长度没满,向前移位了一格                        }else{//碰到null,说明是最大值                            arr[i+1] = alarmMessage;                            break;                        }                    }else{                        if(alarmMessage.getId() > arr[i].getId()){//比当前位置的值要大                            if(i == 0){//比第一个大                                if(i < arr.length-1){                                    arr[i+1] = arr[i];                                }                                arr[0] = alarmMessage;                                break;                            }else if(i == arr.length-1){//跟数组中最后一个(也就是最小)比较                                //不做处理,继续往前查找                            }else if(i < arr.length-1){                                arr[i+1] = arr[i];//让当前位置的对象覆盖后面的                            }                        }else{//比当前位置的对象小,结束                            if(i < arr.length-1){//前面的都大,到此结束                                arr[i+1] = alarmMessage;                                break;                            }else if(i == arr.length-1){//比最后一个还小                                break;                            }                        }                    }                }            }            return Arrays.asList(arr);        }catch (Exception e){            return new ArrayList<AlarmMessage>();        }    }








0 0
原创粉丝点击