首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 統計字串字元出現次數:Map vs 陣列效能比較

     編輯:程式設計綜合問答

問題探討

統計一段字串中每個字元出現的次數,使用 HashMap<Character, Integer> 是最直觀的寫法,但真的是最簡單、最高效的嗎?

陣列計數法:更優選擇

由於字元本質上是整數 (ASCII/Unicode 碼點),利用整數陣列直接以字元碼值為索引計數,避免了 HashMap 的雜湊計算、物件封裝與自動裝箱拆箱開銷,效能顯著優於 Map。

程式碼範例 (ASCII 範圍)

public class CharCountDemo {
    public static void main(String[] args) {
        int[] counts = new int[256]; // 涵蓋擴展 ASCII
        String text = "fdasjfksajfklsajfldas.asdfsadfjpiwe]wqdsafdsa][]afsda.fsafsa21341234";
        
        for (char c : text.toCharArray()) {
            counts[c]++; // 直接以字元當索引遞增
        }
        
        for (int i = 0; i < 256; i++) {
            if (counts[i] != 0) {
                System.out.println((char)i + " : " + counts[i]);
            }
        }
    }
}

適用場景與擴展

  • ASCII/基本多語言平面 (BMP): 陣列大小 65536 (new int[Character.MAX_VALUE + 1]) 即可覆蓋所有 char 值。
  • 完整 Unicode (含補充字元): 需使用 codePointAt 遍歷,搭配 Map<Integer, Long> 或外部庫 (如 FastUtil) 處理稀疏分佈。
  • 單純統計英文/數字/常用符號: 固定大小 128 或 256 陣列最輕量。

結論:對於固定字元集的計數任務,陣列索引法在時間與空間效率上完勝 Map,是首選實作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved