📌  相关文章
📜  根据频率对字符串数组进行排序(1)

📅  最后修改于: 2023-12-03 15:40:28.710000             🧑  作者: Mango

根据频率对字符串数组进行排序

在实际的开发中,有时需要根据字符串出现的频率来对字符串数组进行排序,该需求可以通过以下步骤实现:

步骤
  1. 遍历字符串数组,统计每个字符串出现的次数。
  2. 将统计结果存储在一个哈希表中,key为字符串,value为出现次数。
  3. 将哈希表中的元素转为List并排序,排序方式为根据value从大到小排序。
  4. 遍历排好序的List,将每个元素按出现次数输出。

以下为具体实现代码:

import java.util.*;

public class FrequencySort {

    public static void main(String[] args) {
        String[] strs = {"apple", "banana", "orange", "banana", "orange", "orange"};
        List<String> result = frequencySort(strs);
        System.out.println(result);
    }

    public static List<String> frequencySort(String[] strs) {
        // 统计每个字符串出现的次数
        Map<String, Integer> frequencyMap = new HashMap<>();
        for (String str : strs) {
            frequencyMap.put(str, frequencyMap.getOrDefault(str, 0) + 1);
        }

        // 将哈希表中的元素转为List并排序
        List<Map.Entry<String, Integer>> entryList = new ArrayList<>(frequencyMap.entrySet());
        entryList.sort((o1, o2) -> o2.getValue() - o1.getValue());

        // 遍历排好序的List,将每个元素按出现次数输出
        List<String> result = new ArrayList<>();
        for (Map.Entry<String, Integer> entry : entryList) {
            int frequency = entry.getValue();
            String str = entry.getKey();
            for (int i = 0; i < frequency; i++) {
                result.add(str);
            }
        }
        return result;
    }
}

以上代码中,我们使用了一个哈希表来统计每个字符串出现的次数,并将其转为了List并排序,最后遍历排好序的List按出现次数输出了每个字符串。

总结

本文介绍了根据频率对字符串数组进行排序的方法,具体实现可参考以上代码,需要注意的是,在统计每个字符串出现次数时,需要使用哈希表,并且在转为List并排序时,可以使用Sort的Lambda写法进行简化。