*输入:1 1 1 2 2 3 3 3 3 3
*输出:3 3 3 3 3 1 1 1 2 2
注:3 出现5次,1出现3次,2出现2次。
代码实现如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* 对数组按频率排序输出
*输入:1 1 1 2 2 3 3 3 3 3
*输出:3 3 3 3 3 1 1 1 2 2
*/
public class SortByFrequency {
public static void main(String[] args) {
int[] array = {1,1,1,2,2,3,3,3,3,3};
List<Integer> res = sortByFrequency(array);
System.out.println(res.toString());
}
public static List<Integer> sortByFrequency(int[] array) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < array.length; i++) {
if (map.get(array[i]) == null) {
map.put(array[i], 1);
}else {
map.put(array[i], map.get(array[i]) + 1);
}
}
Set<Entry<Integer, Integer>> keySet = map.entrySet();
List<Map.Entry<Integer, Integer>> mapEntries = new ArrayList<Map.Entry<Integer,Integer>>(keySet);
Collections.sort(mapEntries,new Comparator<Map.Entry<Integer, Integer>>() {
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
// o1.getValue() - o2.getValue() 升序
// o2.getValue() - o1.getValue() 降序
return (o2.getValue() - o1.getValue());
}
});
List<Integer> res = new ArrayList<Integer>();
for (int i = 0; i < mapEntries.size(); i++) {
for (int j = 0; j < mapEntries.get(i).getValue(); j++) {
res.add(mapEntries.get(i).getKey());
}
}
return res;
}
}