ArrayList提前调用clear()?

时间:2016-03-02 23:25:02

标签: java arraylist

我只是在这里测试一个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);
}

1 个答案:

答案 0 :(得分:2)

  

以某种方式c​​的clear函数在被添加到b

之前被调用

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

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

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

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