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

Java List 重複元素統計:Collections.frequency 與 Map 兩種實現

     編輯:Java 相關知識

場景

統計 List 中各元素出現次數。JDK 1.5+ 提供 Collections.frequency(),亦可手動用 Map 計數。

示例數據

List list = new ArrayList<>();
list.add("a"); list.add("b"); list.add("c"); list.add("d");
list.add("b"); list.add("c"); list.add("a"); list.add("a"); list.add("a");
// 結果:a:4, b:2, c:2, d:1

方法一:Collections.frequency()

統計單個元素

System.out.println("a 出現次數: " + Collections.frequency(list, "a")); // 4

統計所有元素(配合 Set 去重)

Set unique = new HashSet<>(list);
for (String s : unique) {
    System.out.println(s + ": " + Collections.frequency(list, s));
}

缺點:每次調用需遍歷整個 List,時間複雜度 O(n²),大數據量性能差。

方法二:Map 計數(推薦,O(n))

Map map = new HashMap<>();
for (String s : list) {
    Integer count = map.get(s);
    map.put(s, (count == null) ? 1 : count + 1);
}

// 輸出
for (Map.Entry entry : map.entrySet()) {
    System.out.println("Key-value: " + entry.getKey() + " - " + entry.getValue());
}

進階:按 Key 排序輸出

Map sortedMap = new TreeMap<>(map); // 自然順序排序
for (Map.Entry entry : sortedMap.entrySet()) {
    System.out.println("Key-value: " + entry.getKey() + " - " + entry.getValue());
}

完整運行輸出

例子1 - 計算'a'出現的次數
a : 4

例子2 - 計算所有對象出現的次數
d: 1
b: 2
c: 2
a: 4

例子3 - 用Map來計算對象出現的次數
Key-value : d - 1
Key-value : b - 2
Key-value : c - 2
Key-value : a - 4

Map排序-以key排序
Key-value : a - 4
Key-value : b - 2
Key-value : c - 2
Key-value : d - 1

性能建議

  • 小列表(<1000 元素):Collections.frequency 代碼簡潔可接受
  • 大列表或高頻調用:必須使用 Map 計數,避免 O(n²) 陷阱
  • JDK 8+ 可用 Stream API 一行搞定:list.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting()))
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved