我正在尝试求解帕斯卡三角形。我有两个用 Java 编写的代码片段,第一个创建 inner
ArrayList 几次并且对我来说效果很好。
但是在代码的第二个版本中,如果我修改 inner
ArrayList,它还修改了outer
ArrayList 并没有给我预期的结果。谁能解释一下为什么会发生这种情况?
此外,使用inner = new ArrayList<Integer>();
语句不是一个好方法,因为我在一个短函数中使用了几次。我怎样才能摆脱它?任何解释和建议将不胜感激!
方式一:有效但效率不高!
public static ArrayList<ArrayList<Integer>> generate(int a) {
ArrayList<ArrayList<Integer>> outer = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> inner = new ArrayList<Integer>();
if (a==0) return outer;
inner.add(1);
outer.add(inner);
if(a==1) return outer;
inner = new ArrayList<Integer>();
inner.add(1);
inner.add(1);
outer.add(inner);
inner = new ArrayList<Integer>();
if (a==2) return outer;
for (int i=2; i<a; i++){
inner = new ArrayList<Integer>();
inner.add(1);
for(int j=1; j<i; j++){
inner.add(outer.get(i-1).get(j-1)+outer.get(i-1).get(j));
}
inner.add(1);
outer.add(inner);
}
return outer;
}
方法2:不起作用!
public static ArrayList<ArrayList<Integer>> generate(int a) {
ArrayList<ArrayList<Integer>> outer = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> inner = new ArrayList<Integer>();
if (a==0) return outer;
inner.add(1);
outer.add(inner);
inner.clear();
if(a==1) return outer;
inner.add(1);
inner.add(1);
outer.add(inner);
inner.clear();
if (a==2) return outer;
for (int i=2; i<a; i++){
inner.add(1);
for(int j=1; j<i; j++){
inner.add(outer.get(i-1).get(j-1)+outer.get(i-1).get(j));
}
inner.add(1);
outer.add(inner);
inner.clear();
}
return outer;
}
最佳答案
如果要添加多个ArrayList<Integer>
外在的对象ArrayList
,您必须调用 new ArrayList<Integer>()
为每一个。你的第二个版本并没有更有效。在你的第二个版本中,你清除了每个 ArrayList<Integer>
您创建的,这意味着您的所有列表都是空的。
请记住:
outer.add(inner);
inner.clear();
还有这个:
inner.clear();
outer.add(inner);
彼此等效。两组指令都会清空内部ArrayList
并将其添加到外部 ArrayList
.
关于java - 修改 Arraylist 的元素并将其添加到 ArrayList 的另一个 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33470824/