【发布时间】:2021-10-31 13:06:09
【问题描述】:
目前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");
}
}
谢谢
【问题讨论】:
-
在声明列表时使用抽象类型和推断类型,即
List<List<Integer>> result = new ArrayList<>();。永远不要使用clone();使用复制构造函数List<List<Integer>> tmp1 = new ArrayList<>(result);复制一个列表(注意这是一个浅拷贝)。你真的需要调试你的代码;见stackoverflow.com/questions/25385173 -
我还没有完全分析你的代码,但你是否意识到克隆并没有进行深度克隆。因此对于嵌套列表,包含的列表将是相同的对象。你应该复制它们。
-
我认为你正在努力解决这个问题。考虑从 0 迭代到 3,将该数字转换为二进制,然后将二进制数字转换为列表中的元素,然后收集这些列表(您可以在 1 行中完成整个任务)。
-
@Bohemian :是的,建议的替代方案似乎更有趣且更直接。会试试的。
-
我相信,如果你的代码缩进得当,会有更多的人有兴趣分析它。您的 IDE 可以为您完成。
标签: java arraylist collections