input:
1
5
5 5 4 6 4
output:
4 4 5 5 6
代码(value逆序排序部分参考了https://www.jianshu.com/p/240875d9f70a):
import java.util.*;
import java.util.Map.Entry;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int e_num = Integer.parseInt(scan.nextLine());//测试数
while(e_num>0){
int n = Integer.parseInt(scan.nextLine());//数字数目
String num[] = scan.nextLine().split(" ");//初始数组
Map<String, Integer> map = new TreeMap<String, Integer>();
//插入Scanner所得元素
for(int k = 0;k<n;k++){
if(map.containsKey(num[k])){
map.put(num[k],map.get(num[k])+1);
}
else{
map.put(num[k], 1);
}
}
int count = 0;
String[] keynum = new String[map.size()];
//这里将map.entrySet()转换成list
List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
//然后通过比较器来实现排序
Collections.sort(list,new Comparator<Map.Entry<String,Integer>>() {
//按value降序排序
public int compare(Entry<String, Integer> o1,Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
for(Map.Entry<String,Integer> mapping:list){
keynum[count] = mapping.getKey();
count ++;
}
String[] result = new String[n];//将有序map键传入数组
int p = 0;
for(int i = 0;i < keynum.length;i ++){
String temp = keynum[i];
for(int j = 0;j < map.get(temp);j ++){
result[p] = temp;
p++;
}
}
for(int i = 0;i < n;i ++){
if(i == n-1){
System.out.print(result[i]);
}else{
System.out.print(result[i]+" ");
}
}
System.out.println();
e_num --;
}
}
}