java - 在ArrayList的ArrayList中,如何在更新内部数组时保留父数组列表中的值?

标签 java arraylist memory-management collections

ArrayList<ArrayList<Integer>> aal=new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> al= new ArrayList<Integer>();
for(int i=2;i<6;i++)
{
    al.add(i);
    if(i%2!=0)
    {
        aal.add(al);
        al.clear();
    }
}

输出:[[4,5][4,5]]

所需输出:[[2,3][4,5]]

最佳答案

al.clear()还将清除您刚刚放入 aal 的数组列表的内容。这是因为aal中的数组列表以及 al 引用的那个是相同数组列表。您可以通过以下两种方法来解决此问题。

  1. 添加到aal后创建一个新的数组列表:

    for(int i=2;i<6;i++)
    {
        al.add(i);
        if(i%2!=0)
        {
            aal.add(al);
            al = new ArrayList<>();
        }
    }
    
  2. 添加 al 的副本至aal (这可能是您期望代码执行的操作):

    for(int i=2;i<6;i++)
    {
        al.add(i);
        if(i%2!=0)
        {
            aal.add(new ArrayList<>(al));
            al.clear();
        }
    }
    

请注意,在这两种情况下,我都使用 new ArrayList<> 创建新的数组列表。 .

关于java - 在ArrayList的ArrayList中,如何在更新内部数组时保留父数组列表中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58111019/

相关文章:

Java 将 Swing 表存储在 Arraylist 中

java - 非常基本的 Java : For-Loop in Java method won't run

java - JTable 由 ArrayList 填充,结果不好

java - 使用 GridBagLayout 将跨列居中

Java - 从变量中删除 "Optional"(转换)

java - Java 中 Thread 中的 WeakReference

c++ - 解码由 GetAdaptersAddresses Windows API 函数返回到内存中的 IP_ADAPTER_ADDRESSES 结构?

c++ - 删除保留字而不在循环的第一遍调用析构函数

java - java代码性能分析工具

java - Lambda 表达式不工作,被终止