java實現列印list中重複次數最多的前n個數據
阿新 • • 發佈:2018-12-30
如: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++;
}
}
}