效率不是很高,只是一个简单解决办法,下次优化一下
import java.util.*;
/**
* 给定一个整形数组,求出频率最高的N个数
*/
public class TopK {
public static int[] arr = {1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 2};
public static void main(String[] args) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < arr.length; i++) {
Integer a = map.get(arr[i]);
if (a != null) {
map.put(arr[i], ++a);
} else {
map.put(arr[i], 1);
}
}
List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
for (int i = 0; i < list.size(); i++) {
Map.Entry<Integer,Integer> entry=list.get(i);
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}```