我正在尝试练习,我将向一个arraylist添加1000个元素,然后再次从列表中系统地删除它们(通过指定索引).这背后的想法是比较LinkedList和ArrayList的性能.
int totalObjects = 0;
for(int i = 0; i < 1000; i++)
{
totalObjects += 1;
al.add("Object " + totalObjects);
}
System.out.println("The Arraylist size is " + al.size());
Run Code Online (Sandbox Code Playgroud)
如果我这样做,只有一半的元素被删除......为什么会这样?
for(int index = 0; index < al.size(); index++)
{
al.remove(index);
}
System.out.println("The Arraylist size after removal is " + al.size());
Run Code Online (Sandbox Code Playgroud)
亲切的问候阿里安
Jam*_*gne 12
发生这种情况是因为您通过删除来更改索引.如果删除元素0,则元素1现在变为元素0.现在,当您下一次删除1时,这就是过去的元素2,而元素1仍然存在于索引0处.
避免这种情况的最简单方法是从头到尾循环.
或者,您可以继续删除索引0,直到ArrayList为空.
请注意,只需使用该clear()方法即可立即删除所有元素.在您的代码中,问题是列表在您迭代它的同时被修改,有效地减小了它的大小,因此index < al.size()条件失败.试试这个:
for (int index = 0, n = al.size(); index < n; index++)
al.remove(0);
Run Code Online (Sandbox Code Playgroud)
或者,此解决方案最后删除元素,使其更有效(不再需要复制元素):
for (int idx = al.size() - 1; idx >= 0; idx--)
al.remove(idx);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14792 次 |
| 最近记录: |