java根據元素出現的個數進行排序---hashmap、sort
阿新 • • 發佈:2021-03-06
給定一個正整數無序陣列,按照出現的次數由少到多排序,如果兩數次數相同則按照數由小到大排。例:
給定陣列:{3,3,3,2,2,4,4,1,8,7,7,7,7,6},排序結果為:[1, 6, 8, 2, 4, 3, 7]
解析:1出現一次,6出現一次,8出現一次,按照1<6<8;2出現兩次,4出現兩次,按照2<4;3出現三次,7出現四次。
提示:你可以使用Map,Java8 API來解決。
我的解題:
先將每個數與其出現的個數儲存在hashmap中
將hashmap的keySet轉成list
給list傳一個自定義的比較器,進行排序
public static void main(String[] args) { Integer[] arr={3,3,3,2,2,4,4,1,8,7,7,7,7,10}; HashMap<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < arr.length; i++) { if(map.get(arr[i])==null){ map.put(arr[i],1); }else{ Integer tmp=map.get(arr[i]); map.put(arr[i],tmp+1); } } Set<Integer> set = map.keySet(); ArrayList<Integer> list = new ArrayList<>(); Iterator<Integer> iterator = set.iterator(); while(iterator.hasNext()){ list.add(iterator.next()); } list.sort(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { if(map.get(o1)>map.get(o2)) return 1; else if(map.get(o1)==map.get(o2)) return o1-o2; else return -1; } }); System.out.println(list); }
程式執行結果: