java - 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
解决方案
您的问题是,您试图在不存在的索引中设置一个值。
要了解此案例,您应该知道基本区别:
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]
推荐阅读
- sql - 使用联合时如何检索嵌套表
- wordpress - 重写,通过 wordpress 中的 .htaccess 将尾部添加到域
- machine-learning - 检查输入时出错:预期 dense_1_input 的形状为 (1500,) 但得到的数组的形状为 (1,)
- c++ - 从循环中获取总值
- c# - 如何从 mysql 数据库中访问
- 在下拉微调器中选择
- facebook - Facebook 开发人员中的 Account Kit App Secret 未显示
- bash - 使用通配符并循环从 sftp 服务器下载文件
- python - 如何使用已安装的模块运行 Python 脚本批处理文件
- wordpress - 我的重定向在一个站点的 .htaccess 中不起作用。他们正在其他网站上工作,并且声明似乎完全相同
- c# - 如何使用 C# 在画布上的 WPF 中绘制透明 PNG