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

Java 集合框架實戰:List、Set、Map 綜合應用案例

     編輯:Java 綜合教學

Java 集合框架實戰:List、Set、Map 綜合應用案例

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 唯一 存儲「字符→次數」映射,最終輸出結果

進階優化方案(Java 8+ Stream API)

實際項目中推薦使用 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。
  • 大數據量時,雙層循環 O(n²) 效率低,優先考慮 Map.merge() 或 Stream API。

理解集合特性,選對工具,代碼才能又短又快。

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