gpt4 book ai didi

java - ArrayList提前调用clear()?

转载 作者:行者123 更新时间:2023-12-02 03:52:31 25 4
gpt4 key购买 nike

我只是在这里测试 SQL 结果集分页方法,但每次我尝试将数据从 c 添加到 b 时,b 都会以某种方式结束为空 >c 的clear 函数在添加到b 之前被调用,然后发送回主类。我认为这可能是一个初始化错误,但我测试了它,发现它与c.clear()有关,删除它允许将数据添加到b code> 但不会清除接下来 7 个或更少项目的 c。为什么之前会清除或者我如何确保它直到最后才清除?

(说明:每个结果集的列都保存为 ArrayList,代表一行数据。然后将其包裹在代表整个结果集的另一个数组中,该结果集发送到此方法以拆分为 7 行的页面,并且发送回 HashMap 以供以后检索。)

这只是一个测试,并不是在这里寻求完美

public static void Index(ArrayList<ArrayList<String>> raw, String user) {       
ArrayList<ArrayList<ArrayList<String>>> b = new ArrayList<ArrayList<ArrayList<String>>>();
ArrayList<ArrayList<String>> c = new ArrayList<ArrayList<String>>();
int n = 0;

for (ArrayList<String> a : raw) {
if (n < 6 && a.size() > 1) {
c.add(a);
n++;
} else if (a.size() == 1) {
c.add(a);
b.add(c);
c.clear();
} else {
n = 0;
b.add(c);
c.clear();
}
}

n = 0;
Clarify.results.put(user, b);
}

最佳答案

somehow c's clear function is called before it is added to b

Java只有原始变量和引用变量。abc 只是对象的引用。当您添加对集合的引用,然后更改引用指向的数据时,您就更改了该对象的唯一副本。

简而言之,您无法将对象添加到列表中,只能将对该对象的引用添加到列表中。

尝试创建一个新列表而不是清除旧列表,而不是调用 c.clear()

// create a new list instead of altering the one we just added
c = new ArrayList<>();

关于java - ArrayList提前调用clear()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35760265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com