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

Java List add/get 索引錯位?循環內重複使用同一物件導致

     編輯:程式設計綜合問答

問題現象

JSON 解析迴圈中 fetchDatefromID.add(i, tempProgram),但 get(i) 取出的皆為最後一筆資料。

錯誤程式碼

CustomerList tempProgram = new CustomerList(); // 迴圈外只建立一次
for (int i = 0; i < jArray.length(); i++) {
    JSONObject json_data = jArray.getJSONObject(i);
    tempProgram.setCompanyName(json_data.getString("company"));
    tempProgram.setID(json_data.getString("id"));
    fetchDatefromID.add(i, tempProgram); // 每次加入同一物件參考
}

原因

tempProgram 只實例化一次,迴圈每輪修改屬性並加入 List,導致 List 所有元素指向同一物件,最終皆呈現最後修改的值。

修正:迴圈內新建物件

for (int i = 0; i < jArray.length(); i++) {
    JSONObject json_data = jArray.getJSONObject(i);
    CustomerList tempProgram = new CustomerList(); // 每輪新建
    tempProgram.setCompanyName(json_data.getString("company"));
    tempProgram.setID(json_data.getString("id"));
    fetchDatefromID.add(tempProgram); // 直接 add 尾端即可
}

補充建議

  • 使用 fetchDatefromID.add(tempProgram) 取代 add(i, ...),避免索引管理錯誤
  • 考慮使用 Gson/Jackson 直接映射為 List<CustomerList>,省去手動解析
  • 若資料量大,注意 GC 壓力,可採用物件池或複用模式 (需確保線程安全)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved