【问题标题】:Difference between set and add methods in list in javajava中list中set方法和add方法的区别
【发布时间】:2021-04-17 09:23:42
【问题描述】:

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

输入- 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

【问题讨论】:

  • set() 方法只能覆盖现有索引处的元素。 add() 方法添加新元素。
  • set 用于替换列表中指定索引处的已经存在的值。 add 在列表末尾或指定索引处添加新元素(该索引处的前一个元素不会被替换,而是右移)。

标签: java list dynamic set add


【解决方案1】:

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

要理解这个案例,你应该知道基本的区别:

set() 参数

set() 方法有两个参数。

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

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]

【讨论】:

    【解决方案2】:

    您的问题是通过不存在的索引设置值。假设您有 numRows = 4

    所以:

    当 i == 2 时:

    j == 0 -> 创建 Index = 0 的元素

    j == 1 -> 尝试为 Index = 1 设置新元素。(没有 id = 1 的元素,当您只有一个 id = 0 的元素时)

    【讨论】:

      猜你喜欢
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 2022-11-05
      相关资源
      最近更新 更多