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

多维ArrayList出现重复数据异常行为,求助原因分析

问题分析与解决方案

你的问题核心在于复用了同一个FLines ArrayList对象,而不是每次循环都创建新的实例。让我一步步给你拆解:

为什么会出现重复结果?

你在循环外只创建了一次FLines:

final ArrayList<String> FLines = new ArrayList<String>();

之后每次循环里调用FLines.clear()再添加新数据,本质上是在修改同一个List对象的内容。而FoundRides中存储的是这个List对象的引用,不是副本。所以不管你调用add还是set,最终FoundRides里的所有元素都指向同一个FLines对象,当最后一次循环修改完FLines后,所有引用都会显示最后一次的内容。

修复后的代码

把FLines的创建移到循环内部,每次循环都生成新的ArrayList实例:

final ArrayList<List<String>> FoundRides = new ArrayList<>();
// 先初始化初始数据(如果需要的话)
for (int i = 0; i < array.length(); i++) {
    FoundRides.add(Arrays.asList("Ankit", "Bohra", "Xyz"));
};

// 移除循环外的FLines定义,移到循环内
for (int i = 0; i < array.length(); i++) {
    JSONObject line = array.getJSONObject(i);
    // 每次循环新建一个FLines对象
    ArrayList<String> FLines = new ArrayList<>();
    FLines.add(line.getString("destinatie"));
    FLines.add(line.getString("kmride"));
    FLines.add(line.getString("created_at"));
    // 用set替换对应位置的初始数据
    FoundRides.set(i, FLines);
}

简化版(如果不需要初始数据)

如果你不需要一开始的Ankit,Bohra,Xyz数据,可以直接在循环里创建新List并添加,省去初始化步骤:

final ArrayList<List<String>> FoundRides = new ArrayList<>();
for (int i = 0; i < array.length(); i++) {
    JSONObject line = array.getJSONObject(i);
    ArrayList<String> FLines = new ArrayList<>();
    FLines.add(line.getString("destinatie"));
    FLines.add(line.getString("kmride"));
    FLines.add(line.getString("created_at"));
    FoundRides.add(FLines);
}

修改后,每次循环都会生成独立的FLines实例,FoundRides里的每个元素都指向不同的List对象,各自保存对应循环的数据,就不会出现全部显示最后一条结果的问题了。

内容的提问来源于stack exchange,提问作者P.Bogdan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:05:04