我只是在这里测试一个SQL结果集分页方法,但每次我尝试将数据从c
添加到b
时,b都会因为某种方式而c
& #39; s clear函数在被添加到b
然后发送回主类之前被调用。我认为这可能是一个初始化错误,但我已对其进行了测试,发现它与c.clear()
有关,删除此项允许将数据添加到b
但却赢了清除c
以查看接下来的7个或更少项目。为什么之前清算或如何确保清除直到最后?
(澄清:每个结果集的列都保存为ArrayList,表示一行数据。然后包含另一个数组,表示整个结果集,此处发送到此方法以分割成页面7行并发送回哈希映射以供以后检索。)
这只是一个测试,而不是在寻找完美
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);
}
答案 0 :(得分:2)
以某种方式c的clear函数在被添加到b
之前被调用
Java只有原始和引用变量。
a
和b
以及c
只是对象的引用。当您添加对集合的引用然后更改引用指向的数据时,您将更改该对象的唯一副本。
简而言之,您无法将对象添加到List中,只能将引用添加到该对象中。
尝试创建新列表而不是清除旧列表,而不是调用c.clear()
。
// create a new list instead of altering the one we just added
c = new ArrayList<>();