代碼 ArrayList 是 Android/Java 開發中極常見的「列表項數據模型」:外層列表對應列表行,內層 Map 對應單行的多字段 (如標題、圖標、副文本)。
// 1. 聲明:動態數組,泛型為 Map
ArrayList
nameDate (ArrayList)
├── [0] → HashMap { "name" → "張三", "img" → 2131230723 }
├── [1] → HashMap { "name" → "李四", "img" → 2131230724 }
├── [2] → HashMap { "name" → "王五", "img" → 2131230725 }
└── ...
// 佈局 res/layout/item_simple.xml
// 適配器綁定
String[] from = {"img", "name"}; // Map 的鍵
int[] to = {R.id.img, R.id.name}; // 佈局控件 ID
SimpleAdapter adapter = new SimpleAdapter(
this,
nameDate, // 數據源
R.layout.item_simple, // 項目佈局
from, to // 映射關係
);
listView.setAdapter(adapter);
// 實體類 (Data Class / Lombok)
@Data @AllArgsConstructor
class ContactItem {
String name;
Object img; // int (ResId) 或 String (URL)
String phone; // 可擴展字段
boolean isOnline;
}
// 構建列表
List items = new ArrayList<>();
for (int i = 0; i < name.length; i++) {
items.add(new ContactItem(name[i], img[i], "", false));
}
// RecyclerView + ViewHolder 類型安全綁定
class ContactAdapter extends RecyclerView.Adapter {
List items;
// onCreateViewHolder, onBindViewHolder 中直接 item.getName() 無需轉型
}
| 維度 | Map | 實體類 |
|---|---|---|
| 類型安全 | ❌ 運行時才發現鍵錯誤/類型轉換異常 | ✅ 編譯期檢查、IDE 提示、重構安全 |
| 擴展性 | ✅ 動態增減字段、適配後端動態字段 | ❌ 需修改類定義 |
| 序列化 | ✅ JSON 庫原生支援 | ✅ 同樣支援、可控制字段 |
| 性能 | Hash 查找、裝箱/拆箱開銷 | 直接字段訪問、無裝箱、更快 |
| 適用場景 | SimpleAdapter、動態表單、後端 Schema 不固定 | RecyclerView、業務核心模型、長期維護專案 |
public static final String KEY_NAME = "name" 常量,避免字符串硬編碼錯誤。
3. Map 值類型統一:盡量用 String,圖片資源 ID 用 Integer,避免 Object 到處強轉。
4. 構建器模式簡化創建:Map.of("name", name, "img", img) (Java 9+)。
這個結構是「動態數據綁定」的基石:列表 = 項目集合,項目 = 鍵值對集合。理解它是掌握 Android 列表開發的入門鑰匙。