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

Java 泛型類型 List> 解讀指南

     編輯:程式設計疑難解答

類型拆解

List<Map<String, Object>>
  1. 最外層:List<...> — 有序集合,允許重複,支援索引存取。
  2. 元素類型:Map<String, Object> — 鍵值對集合,Key 為 String,Value 為任意物件。
  3. 實際執行時:因泛型擦除,JVM 僅看到 List 和 Map,型別參數僅在編譯期檢查。

具體資料結構圖解

List (介面)
 └─ ArrayList (實作)
      ├─ [0] → Map (介面)
      │       ├─ "img"    → Integer (R.drawable.xxx)
      │       ├─ "name"   → String  ("商品名")
      │       ├─ "price"  → Double  (199.0)
      │       └─ "tags"   → List (巢狀集合)
      ├─ [1] → Map
      │       ├─ "img"   → Integer
      │       └─ ...
      └─ ...

常見操作範例

List<Map<String, Object>> data = getData();

// 遍歷
for (Map<String, Object> row : data) {
    String name = (String) row.get("name"); // 需轉型
    Object priceObj = row.get("price");
    double price = priceObj instanceof Number ? ((Number)priceObj).doubleValue() : 0;
}

// 新增一筆
Map<String, Object> newRow = new HashMap<>();
newRow.put("id", 100);
newRow.put("title", "新商品");
data.add(newRow);

// 序列化為 JSON (Gson/Jackson 自動處理)
String json = new Gson().toJson(data);

避坑指南

  • 型別安全:Object 值取出需強制轉型,易發生 ClassCastException。建議定義 POJO/Record 替代 Map。
  • 可變性:Map 內容可隨時修改,多執行緒環境下需同步或用 ConcurrentHashMap。
  • 序列化:直接序列化 Map 可能產生冗長 JSON(含類別資訊),配置序列化庫忽略 null、使用蛇形命名。

現代替代方案 (Java 16+)

// Record 不可變資料載體,替代 Map
public record Item(int id, String name, double price, List tags) {}

List items = new ArrayList<>();
items.add(new Item(1, "商品", 99.0, List.of("熱銷", "推薦")));
// 型別安全、自動 toString/equals/hashCode、可直接序列化
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved