Java 为什么此arraylist中存在索引越界错误?
为什么这段代码会导致索引越界错误Java 为什么此arraylist中存在索引越界错误?,java,arraylist,indexing,Java,Arraylist,Indexing,为什么这段代码会导致索引越界错误 ArrayList<Integer> list2 = new ArrayList<Integer>(); for (int i = 1; i <= 10; i++){ list2.add(i); //adding numbers to arraylist. Length is equal to 10 } int size = list2.size(); //size now equals 10 for (int i =
ArrayList<Integer> list2 = new ArrayList<Integer>();
for (int i = 1; i <= 10; i++){
list2.add(i); //adding numbers to arraylist. Length is equal to 10
}
int size = list2.size(); //size now equals 10
for (int i = 0; i < size; i++)
if (list2.get(i) == 3 || list2.get(i) == 4)
list2.remove(i);
System.out.println(list2);
ArrayList list2=新的ArrayList();
对于(int i=1;i第一个大小是10
,但是当您删除一个元素时,它会变成9,因此当索引i
到达9
时,您无法访问框9,因为它不存在(因为索引从0
开始)
您需要在每次迭代修改时获得当前大小
for (int i = 0; i < list2.size(); i++) {
if (list2.get(i) == 3 || list2.get(i) == 4) {
list2.remove(i);
}
}
//[1, 2, 4, 5, 6, 7, 8, 9, 10]
for(int i=0;i
而且4
没有被删除,为什么
- 因为当您检查索引
2
时,您会发现值3
,因此您会将其删除
- 然后所有的值在列表中向下移动,值
4
不在索引2
- 由于
i
现在将3
您不会选中该框
要同时删除3
和4
,可以使用以下解决方案之一:
list2.removeIf(i->i==3 | | i==4);
list2=list2.stream()
.filter(i->i!=3&&i!=4)
.collect(收集器.toCollection(ArrayList::new));
从arraylist中删除项目,但从不更新size
变量。因此在第一次remove
之后,size
太大。