Java 集合框架是日常開發的核心工具。本文通過一個「統計字符串中每個字符出現次數」的經典案例,演示 List、Set、Map 三大集合的協同工作機制,幫助你理解各自特性與適用場景。
輸入一個字符串(如 "hello world"),統計每個字符出現的次數,輸出格式:h 出現次數為 1 次。
package tingjizifu;
import java.util.*;
public class TongJi {
public static void main(String[] args) {
// 1. 獲取輸入
Scanner input = new Scanner(System.in);
System.out.print("請輸入字符串:");
String shuRu = input.nextLine(); // 使用 nextLine() 支持空格
input.close();
// 2. 將字符存入 List(保留順序、允許重複)
List<String> list = new ArrayList<>();
for (int i = 0; i < shuRu.length(); i++) {
list.add(String.valueOf(shuRu.charAt(i)));
}
// 3. 將字符存入 Set(自動去重,獲取唯一字符集合)
Set<String> set = new HashSet<>();
for (int i = 0; i < shuRu.length(); i++) {
set.add(String.valueOf(shuRu.charAt(i)));
}
// 4. 使用 Map 統計頻次:Key=字符,Value=次數
Map<String, Integer> map = new HashMap<>();
for (String str : set) {
int sum = 0;
for (String ch : list) {
if (ch.equals(str)) {
sum++;
}
}
map.put(str, sum);
}
// 5. 輸出結果
for (String key : map.keySet()) {
System.out.println(key + " 出現次數為 " + map.get(key) + " 次");
}
}
}
| 集合 | 實現類 | 特性 | 本例作用 |
|---|---|---|---|
| List | ArrayList | 有序、可重複、支持索引 | 保存所有字符(含重複),便於遍歷計數 |
| Set | HashSet | 無序、唯一 | 提取不重複字符集合,作為 Map 的 Key 來源 |
| Map | HashMap | 鍵值對、Key 唯一 | 存儲「字符→次數」映射,最終輸出結果 |
實際項目中推薦使用 Stream API 一行代碼完成:
String input = "hello world";
Map<String, Long> freqMap = input.chars() // IntStream
.mapToObj(c -> String.valueOf((char) c)) // 轉為字符串流
.collect(Collectors.groupingBy(
c -> c,
Collectors.counting()
));
freqMap.forEach((k, v) -> System.out.println(k + " 出現 " + v + " 次"));
Scanner.next() 遇空格截斷,請用 nextLine() 讀取整行。HashSet 不保證順序,若需保持首次出現順序,請用 LinkedHashSet。Map.merge() 或 Stream API。理解集合特性,選對工具,代碼才能又短又快。