首页 > 解决方案 > java中list中set方法和add方法的区别

问题描述

所以有人问我在java中使用2D List生成Pascal三角形......我能够找到解决方案但是......当我在我的程序中使用add方法()时,我没有收到任何错误但是当我使用 set 方法时,我收到 ArrayOutOfBoundIndex for length 1 的错误。有人可以帮我指出不同之处吗?(错误出现的行已被评论)

输入- numRows = 5 预期输出- [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]


    public List<List<Integer>> generate(int numRows) {
            List<List<Integer>> Pa = new ArrayList<List<Integer>>();
            List<Integer>row,prev = null;
            
            for(int i = 0 ; i< numRows;i++){
                row=new ArrayList<Integer>();
                for(int j = 0 ; j<=i;j++){
                    if(j==i||j==0)
                        row.add(1);
                    else{
                      // thisLine -->
                        row.set(j,prev.get(j-1)+prev.get(j));
                    }
                    
                }
                prev=row;
                Pa.add(i,row);
            }
            return Pa;
        }
  at line 64, java.base/jdk.internal.util.Preconditions.outOfBounds
  at line 70, java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex
  at line 248, java.base/jdk.internal.util.Preconditions.checkIndex
  at line 373, java.base/java.util.Objects.checkIndex
  at line 439, java.base/java.util.ArrayList.set
  at line 12, Solution.generate
  at line 54, __DriverSolution__.__helper__
  at line 84, __Driver__.main

标签: javalistdynamicsetadd

解决方案


您的问题是,您试图在不存在的索引中设置一个值。

要了解此案例,您应该知道基本区别:

set() 参数

set() 方法有两个参数。

  • index - 要替换​​的元素的位置
  • element - 要存储在索引处的新元素

set() 返回值

  • 返回先前存在于索引处的元素
  • 如果索引超出范围,则抛出 IndexOutOfBoundsException

ArrayList set() 对比 添加()

add() 和 set() 方法的语法看起来非常相似。

// syntax of add()
arraylist.add(int index, E element)

// syntax of set()
arraylist.set(int index, E element)

而且,这两种方法都在向数组列表中添加一个新元素。这就是为什么有些人认为这两种方法相似的原因。

但是,它们之间存在重大差异。

  • set() 方法通过替换该位置的旧元素来在指定位置添加一个新元素。
  • add() 方法通过将旧元素移向右侧位置,在指定位置添加一个新元素。

例子:

ArrayList<String> list = new ArrayList<String>();

list.add("a");
list.add(1, "b");
System.out.println(list);

list.set(0, "c");
System.out.println(list);

list.add(0, "d");
System.out.println(list);
---------------Output -------------------------------------
[a, b]

[c, b]

[d, c, b]

推荐阅读