java实现打印list中重复次数最多的前n个数据

来源:互联网 发布:多媒体软件的优缺点 编辑:程序博客网 时间:2024/05/16 15:01

如:list中有1,3,4,5,1,7,5,3,4,2,1,5,1……
当输入输入参数n为1时,打印1;当输入参数n为2时,打印1,5

public void printTopN(List<Integer> numbers,int n){    //先统计各个数据出现的次数    Map<Integer,Integer>  countMap = new HashMap<Integer,Integer>();    for(int i = 0;i < numbers.size();i++){        int num = numbers.get(i);        if(countMap.constainsKey(num)){            countMap.put(num,countMap.get(num) + 1);        }else{            countMap.put(num,1);        }    }    //将统计出来的map进行处理    Map<Integer,List<Integer>> resultMap = new HashMap<Integer,List<Integer>>();    List<Integer> tempList = new ArrayList<Integer>(); //用于记录出现次数    for(Entry entry: countMap.setEntry()){        int key = entry.getKey();        int value = entry.getValue();        if(resultMap.constainsKey(value){            List list = (List)resultMap.get(value);            list.add(key);        }else{            List<Ineteger> list = new ArrayList<Integer>();            list.add(key);            resultMap.put(value,list);            tempList.add(value);        }    }    //对出现次数进行排序    ArrayList.sort(tempList);    //输出结果(可能会输出多于n个),如果要只输出n个的话,使用下边方法    int p = 0;  //记录打印次数    for(int i = tempList.size()-1; i >= 0 && p < n; i--) {        List list = resultMap.get(templist.get(i));        for(int j = 0; j < list.size(); j++) {            System.out.print(list.get(j) + ",");            p++;        }    }        //只输出n个    for(int i = tempList.size()-1; i >= 0; i--) {        List list = resultMap.get(templist.get(i));        for(int j = 0; j < list.size() && p < n; j++) {            System.out.print(list.get(j) + ",");            p++;        }    }}
0 0
原创粉丝点击