You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ArrayList仅保留最后一条数据重复显示问题求助

问题分析与解决:ArrayList重复显示最后一个对象

哈哈,这个坑我刚学Java的时候也踩过!你遇到的问题核心原因很明确:你在循环外部只创建了一个Countries对象,每次循环只是修改这个对象的属性,然后把同一个对象的引用重复添加到ArrayList里。

因为ArrayList存储的是对象的引用(也就是内存地址),不是对象本身。所以你循环里做的操作其实是:不断修改同一个对象的name和code,然后把这个对象的地址反复塞进集合。当循环结束时,这个唯一的Countries对象的属性是最后一次循环设置的值,所以集合里所有元素指向的都是这个对象,自然会重复显示最后一个对象的内容,次数刚好等于数组大小。

修正后的代码

你只需要把Countries对象的创建语句移到for循环内部,让每次循环都生成一个新的对象实例就行:

try{ 
    JSONArray json = new JSONArray(sb.toString()); 
    // 将Countries的实例化移到循环内部,每次循环都新建对象
    for(int i=0; i < json.length(); i++) { 
        Countries coun = new Countries(); 
        JSONObject jsonObject = json.getJSONObject(i); 
        coun.setNom((String) jsonObject.get("name")); 
        coun.setCode((String) jsonObject.get("code")); 
        country.add(coun); 
    } 
}catch (JSONException je){ 
    je.printStackTrace(); 
}; 

Log.i(TAG, "- - - "+ country+"- - - " ); 
Iterator it= country.iterator(); 
while (it.hasNext()){ 
    Log.i(TAG, "- - - "+ it.next()+"- - - " ); 
}

这样一来,每个循环都会创建一个独立的Countries对象,每个对象都持有当前JSON元素对应的name和code,添加到ArrayList后,集合里的每个元素都是不同的引用,就能正确显示所有对象的内容啦~

内容的提问来源于stack exchange,提问作者Louis Djankou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:17:38