首页 > 解决方案 > 什么对计数、数组或哈希图(或集合)更有效

问题描述

假设我们被要求计算和打印给定字符串中每个字符的出现次数。为简单起见,字符串只有小写字母。我编写了这两个函数,我想知道哪一个在 Java 中更高效/更可取。

功能一:

private void countAndPrintArray1(String str){
        int[] a = new int[26];
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            int index = c - 'a';
            a[index] = a[index] + 1;
        }

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            int freq = a[c -'a'];
            System.out.println(c+" -> "+ freq);
        }
    }

功能二:

    private void countAndPrintArray2(String str){
        Map<Character, Integer> map = new HashMap<>();

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            int freq = map.getOrDefault(c, 0) + 1;
            map.put(c, freq);
        }

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            int freq = map.get(c);
            System.out.println(c+" -> "+ freq);
        }
    }

标签: javaarraysperformancehashmap

解决方案


根据性能比较这两种方法,两种算法都以 O(n) 时间复杂度运行,其中 n 是所提供字符串的大小。此外,两种情况下的空间复杂度都是 O(1)。谈到偏好,这取决于开发人员和开发产品的团队。虽然 HashMap 方法似乎更加精巧和干净(再次开发人员意见)。


推荐阅读