gpt4 book ai didi

java - 修改 Arraylist 的元素并将其添加到 ArrayList 的另一个 ArrayList

转载 作者:行者123 更新时间:2023-12-01 10:58:28 27 4
gpt4 key购买 nike

我正在尝试求解帕斯卡三角形。我有两个用 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/

27 4 0