首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 字串陣列排序與去重統計實作範例

     編輯:Java 相關知識

情境說明

給定一長串以空白分隔的單字字串,需求為:
1. 依字母順序排序
2. 統計每個單字出現次數
3. 去除重複並輸出「單字:次數」格式

核心思路

  • 使用 String.split(" ") 切割成陣列
  • Arrays.sort() 原地排序
  • 雙層迴圈計算每個單字出現次數(O(n²),資料量小時可接受)
  • 利用 TreeSet 自動去重且保持排序順序

完整程式碼

package action;
import java.util.Arrays;
import java.util.TreeSet;

public class Test {
    public static void main(String[] args) {
        String strs = "ZZZ BBB AAA OOO ZZZ AAA ZZZ BBB AAA ZZZ AAA VVV OOO CCC DDD CCC CCC KKK BBB AAA ZZZ AAA CCC KKK";
        String[] words = strs.split(" ");
        TreeSet<String> resultSet = new TreeSet<>();

        Arrays.sort(words); // 先排序

        for (int i = 0; i < words.length; i++) {
            int count = 0;
            for (int j = 0; j < words.length; j++) {
                if (words[i].equals(words[j])) count++;
            }
            resultSet.add(words[i] + ":" + count);
        }

        for (String s : resultSet) {
            System.out.println(s);
        }
    }
}

執行結果

AAA:7
BBB:5
CCC:5
DDD:1
KKK:2
OOO:2
VVV:1
ZZZ:7

效能優化方向

  1. 使用 Map 統計:Map<String, Integer> map = new HashMap<>(),單次遍歷 O(n) 完成計數。
  2. 串流 API (Java 8+):
    Arrays.stream(words)
        .collect(Collectors.groupingBy(w -> w, Collectors.counting()))
        .entrySet().stream()
        .sorted(Map.Entry.comparingByKey())
        .forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));
      
  3. 若資料量極大,可考慮外部排序或資料庫處理。

常見陷阱提醒

  • TreeSet 依據 compareTo 判斷相等,若物件未正確實作 Comparable 可能導致去重失效。
  • 雙層迴圈在萬筆以上資料會明顯拖慢速度,務必評估資料規模。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved