输入一组数,输出是按每个出现的频率,比如1,3,3,4,5,9,9,9,3,3,输出为3,3,3,3,9,9,9,1,4,5如果频率一样就按原顺序输出。
package com.lyb.array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.Map;
public class SortArray {
public void sortfrequency(int arr[]){
LinkedHashMap<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();
for (int i = 0; i < arr.length; i++) {
if (map.get(arr[i]) == null)
map.put(arr[i], 1);
else
map.put(arr[i], map.get(arr[i]) + 1);
}
//上面的for循环是统计每个数字出现的频率(次数)
ArrayList<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
// 降序排序
public int compare(Map.Entry<Integer, Integer> m1, Map.Entry<Integer, Integer> m2) {
return m2.getValue().compareTo(m1.getValue());
//根据出现的次数排序
}
});
System.out.print( "[");
for (Map.Entry<Integer, Integer> entry : list) {
//双重循环,第一重键值对,第二重根据值。值是多少就循环多少
for (int i = 0; i < entry.getValue(); i++) {
System.out.print(entry.getKey() + " ");
}
}
System.out.print( "]");
}
}