Java 代码片段未按预期工作:使用 ArrayList<ArrayList<Integer>>
Java code snippet not working as expected: Using ArrayList<ArrayList<Integer>>
当前 newResult
正在获取值:[[0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1]]
我正在尝试获取 [[0, 0], [1, 0], [0, 1], [1, 1]]
基本上,作为一个基本案例,结果,我将 [[0], [1]]
然后我尝试向其中添加元素,通过将结果复制到 newResult
两次,然后在前半部分附加 0,在后半部分附加 1。
我也在使用 clone()
,但无法解决问题
import java.util.ArrayList;
public class ArrayListNestedTest {
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
ArrayList<ArrayList<Integer>> newResult = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> zero = new ArrayList<Integer>();
zero.add(0);
ArrayList<Integer> one = new ArrayList<Integer>();
one.add(0);
result.add(zero);
result.add(one);
ArrayList<ArrayList<Integer>> tmp1 = new ArrayList<ArrayList<Integer>>();
ArrayList<ArrayList<Integer>> tmp2 = new ArrayList<ArrayList<Integer>>();
tmp1 = (ArrayList<ArrayList<Integer>>) result.clone();
tmp2 = (ArrayList<ArrayList<Integer>>) result.clone();
newResult.addAll(tmp1);
newResult.addAll(tmp2);
newResult.get(0).add(0);
newResult.get(1).add(0);
newResult.get(2).add(1);
newResult.get(3).add(1);
System.out.println("Hi");
}
}
谢谢
请更简要地描述一下您的任务。看起来你做了太多的动作。例如:是否绝对有必要进行克隆?
感谢@Holger comment. I have changed double curly braces for initializer new ArrayList<Integer>(){{add(0);}}
to new ArrayList<>(Arrays.asList(0))
because it is strongly discouraged。
简单的解决方案可能是这个:
List<List<Integer>> newResult = new ArrayList<>();
newResult.add(new ArrayList<>(Arrays.asList(0)));
newResult.add(new ArrayList<>(Arrays.asList(1)));
newResult.add(new ArrayList<>(Arrays.asList(0)));
newResult.add(new ArrayList<>(Arrays.asList(1)));
newResult.get(0).add(0);
newResult.get(1).add(0);
newResult.get(2).add(1);
newResult.get(3).add(1);
System.out.println(newResult);
当前 newResult
正在获取值:[[0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1]]
我正在尝试获取 [[0, 0], [1, 0], [0, 1], [1, 1]]
基本上,作为一个基本案例,结果,我将 [[0], [1]]
然后我尝试向其中添加元素,通过将结果复制到 newResult
两次,然后在前半部分附加 0,在后半部分附加 1。
我也在使用 clone()
,但无法解决问题
import java.util.ArrayList;
public class ArrayListNestedTest {
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
ArrayList<ArrayList<Integer>> newResult = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> zero = new ArrayList<Integer>();
zero.add(0);
ArrayList<Integer> one = new ArrayList<Integer>();
one.add(0);
result.add(zero);
result.add(one);
ArrayList<ArrayList<Integer>> tmp1 = new ArrayList<ArrayList<Integer>>();
ArrayList<ArrayList<Integer>> tmp2 = new ArrayList<ArrayList<Integer>>();
tmp1 = (ArrayList<ArrayList<Integer>>) result.clone();
tmp2 = (ArrayList<ArrayList<Integer>>) result.clone();
newResult.addAll(tmp1);
newResult.addAll(tmp2);
newResult.get(0).add(0);
newResult.get(1).add(0);
newResult.get(2).add(1);
newResult.get(3).add(1);
System.out.println("Hi");
}
}
谢谢
请更简要地描述一下您的任务。看起来你做了太多的动作。例如:是否绝对有必要进行克隆?
感谢@Holger comment. I have changed double curly braces for initializer new ArrayList<Integer>(){{add(0);}}
to new ArrayList<>(Arrays.asList(0))
because it is strongly discouraged。
简单的解决方案可能是这个:
List<List<Integer>> newResult = new ArrayList<>();
newResult.add(new ArrayList<>(Arrays.asList(0)));
newResult.add(new ArrayList<>(Arrays.asList(1)));
newResult.add(new ArrayList<>(Arrays.asList(0)));
newResult.add(new ArrayList<>(Arrays.asList(1)));
newResult.get(0).add(0);
newResult.get(1).add(0);
newResult.get(2).add(1);
newResult.get(3).add(1);
System.out.println(newResult);