一个数组,按照数字出现的频率排序输出

参考:Comparator的用法java

要求按照数字在数组中出现的次数,由大到小排序,而后输出。
例如:
输入:1 1 1 2 2
输出:1 1 1 2 2
由于2出现两次,1出现三次,因此先输出1,最后输出2。web

例如:
输入:1 1 1 2 2 3 3 3 3 3
输出:3 3 3 3 3 1 1 1 2 2
由于3出现5次,2出现两次,1出现三次,因此先输出3在输出1,最后输出2。数组

解题思路:
用一个hashmap存放数字出现的次数,而后对hashmap的value进行排序。ide

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class Main {

	public static void main(String[] args) {
		int[]data= {1,1,2,2,2,3,3,6,6,66,6,6,6};
		int[]result=get(data);
		
		
		
	}

	private static int[] get(int[] data) {
		HashMap<Integer, Integer> h=new HashMap<>();
		for (int i = 0; i < data.length; i++) {
			if (h.get(data[i])==null) {
				h.put(data[i], 1);
			}else {
				h.put(data[i],h.get(data[i])+1);
			}
		}
		
		Set<Entry<Integer, Integer>> keySet = h.entrySet();
		 List<Map.Entry<Integer, Integer>> infoIds = new ArrayList<>(keySet);
		Collections.sort(infoIds, new Comparator<Map.Entry<Integer, Integer>>() {
			@Override
			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());

				// o1.getKey()).toString().compareTo(o2.getKey() 升序
				// o2.getKey()).toString().compareTo(o1.getKey() 降序
				// return (o1.getKey()).toString().compareTo(o2.getKey());
			}
		});
		int a=0;
		 for (int i = 0; i < infoIds.size(); i++) {
	           
	            for (int j = 0; j < infoIds.get(i).getValue(); j++) {
	            	Integer id = infoIds.get(i).getKey();
	            	System.out.print(id+" ");
				}
	            
	    }

		return null;
	}
	
}