根据相似元素出现的次数对数组列表进行排序

Joh*_* P. 2 java sorting list

我有一个 ArrayList,其中包含{2,2,1,1,1,5,4,4,4,4,4}并且我想根据每个元素出现的次数对其进行排序。所以它会给{4,4,4,4,4,1,1,1,2,2,5}. 我从哪说起呢?

import java.util.*;

public class SortingL{

  public static void main(String[] args){

    ArrayList<Integer> list = new ArrayList<Integer>();

    Integer[] al = new Integer[] {2,2,1,1,1,5,4,4,4,4,4};
    list.addAll(Arrays.asList(al));

    sortL(list);

  }

  public static ArrayList<Integer> sortL(ArrayList<Integer> list){


    return list;
  }
}
Run Code Online (Sandbox Code Playgroud)

Jac*_* G. 6

一种解决方案是使用Collections#frequency

List<Integer> list = Arrays.asList(2, 2, 1, 1, 1, 5, 4, 4, 4, 4, 4);

list.sort(Comparator.comparing(i -> Collections.frequency(list, i)).reversed());

System.out.println(list);
Run Code Online (Sandbox Code Playgroud)

这将输出预期的结果:

[4, 4, 4, 4, 4, 1, 1, 1, 2, 2, 5]

  • 如果您的解决方案需要快速,请使用 Jigar Joshi 的答案,因为我的答案似乎在“O(n^2)”中完成 (2认同)