我编写了java程序,在ArrayList中添加整数并从ArrayList中删除该整数.但它没有给我正确的结果.这是我的代码..
public static void main(String args[])
{
ArrayList<Integer> a=new ArrayList<Integer>();
a.add(6);
a.add(7);
a.add(8);
a.add(9);
for(int i=0;i<=a.size();i++)
{
System.out.println("Removed Elements=>"+a.remove(i));
}
}
Run Code Online (Sandbox Code Playgroud)
它给我输出如下
Removed Elements=>6
Removed Elements=>8
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.remove(ArrayList.java:387)
at CollectionTemp.main(CollectionTemp.java:19)
Run Code Online (Sandbox Code Playgroud)
为什么我得到这样的输出?
Bor*_*ort 50
你的阵列:
a[0]=6
a[1]=7 <-- i
a[2]=8
a[3]=9
Run Code Online (Sandbox Code Playgroud)
然后你在1处删除,我增加到2:
a[0]=6
a[1]=8
a[2]=9 <-- i
Run Code Online (Sandbox Code Playgroud)
请记住,数组索引从0开始,因此最后一个元素位于a.length - 1
因为循环条件而得到异常i <= a.size(),所以在最后的迭代中:
a[0] = 7
a[1] = 9
2 <-- i
Run Code Online (Sandbox Code Playgroud)
Gil*_*anc 19
当您从列表或任何集合中删除项目时,您可以使用迭代器,也可以使用这样的反向循环.
for (int i = (a.size() - 1); i >= 0; i--) {
System.out.println("Removed Elements=>" + a.remove(i));
}
Run Code Online (Sandbox Code Playgroud)
通过向后移动,可以避免在其他答案中记录的增加2问题.
对于第一次迭代,a.remove(i)导致元素7被移除,该元素由remove方法返回.
对于第二次迭代,列表的大小为3,并且您要删除索引2处的元素,即9.删除方法返回9.
简而言之
Iteration | Size of list | index being removed | element removed
----------+--------------+---------------------+----------------
1 | 4 | 1 | 7
2 | 3 | 2 | 9
Run Code Online (Sandbox Code Playgroud)
如果您想要一个正向循环来删除所有元素,您可以使用以下代码:
while(!a.isEmpty())
{
System.out.println("Removed Elements=>" + a.remove(0));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1788 次 |
| 最近记录: |