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

Android HashMap 一對多誤區:List 結構中 Map 實例化位置導致數據覆蓋

     編輯:程式設計疑難解答

問題代碼片段

List<Map<String, Object>> listItems = new ArrayList<>();
for (int i = 0; i < data.size(); i++) {
    Map<String, Object> map = new HashMap<>(); // 正確:循環內 new
    map.put("image", images[i]);
    listItems.add(map);
}

若 new HashMap() 放在循環**外部**,每次迴圈覆蓋同一 Map,列表裡全是同一引用,最終顯示最後一筆資料。

正確結構

List<Map<String, Object>> listItems = new ArrayList<>();
for (Item item : data) {
    Map<String, Object> map = new HashMap<>(); // 每筆資料一個 Map
    map.put("image", item.image);
    map.put("title", item.title);
    listItems.add(map);
}

一對多替代方案

若單鍵對應多值,用 Map> 或 Guava Multimap:

Multimap multimap = ArrayListMultimap.create();
multimap.put("fruit", "apple");
multimap.put("fruit", "banana");
List fruits = (List) multimap.get("fruit");

調試技巧

在循環內打印 map.hashCode() 或 System.identityHashCode(map),確認每次是否為不同實例。

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