如何将ArrayList <integer>添加到ArrayList <arraylist <integer>&gt;一次又一次地使用ArrayList中的不同元素<integer> </integer> </arraylist <integer> </integer>

时间:2014-08-06 13:40:28

标签: java arraylist

我在java中创建了一个ArrayList的ArrayList。并且我将值存储在其中如下:

import java.util.ArrayList;


    class Test {
        public static void main(String args[]) {
                ArrayList<ArrayList<Integer>> connections = new ArrayList<ArrayList<Integer>>();
                ArrayList<Integer> currentConnects = new ArrayList<>();
                currentConnects.add(7);
                currentConnects.add(4);
                connections.add(currentConnects);
                currentConnects.clear();
                currentConnects.add(10);
                currentConnects.add(15);
                connections.add(currentConnects);
                System.out.println(connections);
        }
    }

我期待输出为:

[[7, 4], [10, 15]]

但输出是:

[[10, 15], [10, 15]]

如何在不使用任何其他额外变量的情况下实现预期输出?

4 个答案:

答案 0 :(得分:2)

您实际上在connections对象中引用了两次相同的对象,因此得到了结果。

而不是currentConnects.clear();尝试currentConnects = new ArrayList<>();

答案 1 :(得分:0)

您需要删除currentConnects.clear();并创建一个新的ArrayList Object.Your ArrayList对象指向堆中的同一个Object。ArrayList<ArrayList<Integer>>包含两次相同的ArrayList引用

import java.util.ArrayList;

    class Test {
        public static void main(String args[]) {
                ArrayList<ArrayList<Integer>> connections = new ArrayList<ArrayList<Integer>>();
                ArrayList<Integer> currentConnects = new ArrayList<>();
                currentConnects.add(7);
                currentConnects.add(4);
                connections.add(currentConnects);

                currentConnects = new ArrayList<>();
                currentConnects.add(10);
                currentConnects.add(15);
                connections.add(currentConnects);
                System.out.println(connections);
        }
    }

答案 2 :(得分:0)

每次都必须创建新的数组列表。

当你这样做时:

  connections.add(currentConnects);
  currentConnects.clear();

首先添加currentConnects的引用,然后清除currentConnects的内容,而不是创建新的arraylist。而是做:

  ArrayList<Integer> currentConnects = new ArrayList<>();
  currentConnects.add(7);
  currentConnects.add(4);
  connections.add(currentConnects);
  currentConnects = new ArrayList<>();
  currentConnects.add(10);
  currentConnects.add(15);
  connections.add(currentConnects);

答案 3 :(得分:0)

当您致电connections.add(currentConnects);时,由于connections类型为ArrayList<ArrayList<Integer>>,您实际上是在添加对整个ArrayList连接的引用, NOT 只是整数在ArrayList本身。

因为你两次调用connections.add(currentConnects);,有两个对connections ArrayList的引用,这就是connections中保存的整数打印两次的原因。