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

标签 java arraylist

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

相关文章:

Java 元组/对

java - 使用 ArrayList 类型错误?

java - 无法将 ArrayList 数据加载到 android 中的微调器

java - 二进制转字符矩阵帮助

java - 如何覆盖ArrayList 的ToString 方法,使逗号分隔符被其他符号替换?

java - 将数据库查询结果中的数据存储在二维数组列表中

java - 我应该在派生类中将 'count' 设置为静态吗?如何访问它

java - 指定 Axis 1.4 的日志设置

java - OpenCV4Android 默认的 Mat 图像类型是什么?

java - JDBC 中 SQL 更新查询出错