我在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]]
如何在不使用任何其他额外变量的情况下实现预期输出?
答案 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
中保存的整数打印两次的原因。