📅  最后修改于: 2023-12-03 15:25:55.032000             🧑  作者: Mango
本文介绍如何使用 Java 中的 Map 接口来按照元素出现频率排序。
具体实现方法是通过将元素作为 Map 的键,出现次数作为对应的值,然后根据值的大小来进行排序。
Map<Integer, Integer> frequencyMap = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++) {
int num = nums[i];
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
}
List<Map.Entry<Integer, Integer>> entryList = new ArrayList<>(frequencyMap.entrySet());
Collections.sort(entryList, new Comparator<Map.Entry<Integer, Integer>>(){
public int compare(Map.Entry<Integer, Integer> entry1,
Map.Entry<Integer, Integer> entry2){
return entry2.getValue() - entry1.getValue();
}
});
int[] sortedArray = new int[entryList.size()];
int i = 0;
for(Map.Entry<Integer, Integer> entry : entryList){
sortedArray[i++] = entry.getKey();
}
import java.util.*;
public class FrequencySort {
public int[] frequencySort(int[] nums) {
// 创建一个用于统计元素频率的 Map 对象
Map<Integer, Integer> frequencyMap = new HashMap<Integer, Integer>();
// 遍历输入数组,统计元素出现次数
for (int i = 0; i < nums.length; i++) {
int num = nums[i];
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
}
// 将 Map 的 entrySet 转换成 List 并排序
List<Map.Entry<Integer, Integer>> entryList = new ArrayList<>(frequencyMap.entrySet());
Collections.sort(entryList, new Comparator<Map.Entry<Integer, Integer>>(){
public int compare(Map.Entry<Integer, Integer> entry1,
Map.Entry<Integer, Integer> entry2){
return entry2.getValue() - entry1.getValue();
}
});
// 将排序后的 List 转换成结果数组
int[] sortedArray = new int[entryList.size()];
int i = 0;
for(Map.Entry<Integer, Integer> entry : entryList){
sortedArray[i++] = entry.getKey();
}
return sortedArray;
}
}
本文介绍了使用 Java 中的 Map 接口来实现按照元素出现频率排序的方法。实现过程简单明了,可以帮助初学者更好地理解 Map 接口的使用。