解析數據格式:123,"aaaaa"、232,"bbbbb"... 成對出現,需在迴圈中存儲並後續遍歷顯示。本文對比 HashMap、ArrayList、自定義對象 三種方案,推薦自定義實體類 + ArrayList。
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
HashMap<Integer,String> | O(1) 按 ID 查找 | 無序、鍵唯一、難攜帶多字段 | 純 ID-值映射、頻繁按 ID 查詢 |
ArrayList<String[]> 或 Pair | 簡單 | 語義不清、類型不安全、擴展困難 | 臨時腳本、極簡場景 |
| 自定義類 + ArrayList | 語義清晰、類型安全、易擴展字段、適配 RecyclerView | 稍多寫幾行代碼 | 絕大多數業務場景 |
// 1. 定義實體類
public class DataItem {
private int id;
private String content;
public DataItem(int id, String content) {
this.id = id;
this.content = content;
}
// Getter/Setter...
public int getId() { return id; }
public String getContent() { return content; }
@Override public String toString() { return id + ":" + content; }
}
// 2. 解析存儲
List dataList = new ArrayList<>();
for (/* 解析邏輯 */) {
int id = ...; // 解析出的 ID
String str = ...; // 解析出的字串
dataList.add(new DataItem(id, str));
}
// 3. 遍歷顯示
for (DataItem item : dataList) {
Log.d("DATA", "ID=" + item.getId() + ", Content=" + item.getContent());
// 直接傳給 Adapter:adapter.setData(dataList);
}
若源數據本身是 JSON:
String json = "[[123,\"aaaaa\"],[232,\"bbbbb\"]]"; // 或標準對象陣列
Type type = new TypeToken>(){}.getType();
List list = new Gson().fromJson(json, type);
LinkedHashMap)Map 語義模糊RecyclerView.Adapter 仍需轉為 List成對 ID-String 數據,定義 DataItem 實體類 + ArrayList<DataItem> 是工程化最佳選擇:語義明確、類型安全、無縫對接 UI 組件、易於擴展。寫幾行 Getter/Setter 換來維護性大幅提升,極其划算。