【发布时间】:2018-03-28 18:07:23
【问题描述】:
当我尝试一个一个地删除它们时,我在 ArrayList 中有 10001 个元素,我在中途得到 IndexOutOfBoundsException 异常,即在 5000 个元素之后。真不知道为什么。
public static void main(String[] args) {
List<Integer> numberArrayList = new ArrayList<>();
List<Integer> numberLinkedList = new LinkedList<>();
long start, end;
start = System.currentTimeMillis();
for (int i = 0; i < 10_001; i++) {
numberArrayList.add(i);
}
end = System.currentTimeMillis();
System.out.println("Time taken to insert 10_001 elements in ArrayList: " + (end - start));
start = System.currentTimeMillis();
for (int i = 0; i < 10_001; i++) {
numberLinkedList.add(i);
}
end = System.currentTimeMillis();
System.out.println("Time taken to insert 10_001 elements in LinkedList: " + (end - start));
/* **************************************************************/
start = System.currentTimeMillis();
for (int i = 0; i < 10_001; i++) {
numberArrayList.remove(i);
}
end = System.currentTimeMillis();
System.out.println("Time taken to remove 10_001 elements from the front in ArrayList: " + (end - start));
start = System.currentTimeMillis();
for (int i = 0; i < 10_001; i++) {
numberLinkedList.remove(i);
}
end = System.currentTimeMillis();
System.out.println("Time taken to remove 10_001 elements from the front in LinkedList: " + (end - start));
}
上面的程序结果
Time taken to insert 100_001 elements in ArrayList: 2
Time taken to insert 100_001 elements in LinkedList: 1
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 5001, Size: 5000
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.remove(ArrayList.java:496)
at collections_jnit.list.ArrayList_vs_LinkedList.main(ArrayList_vs_LinkedList.java:34)
【问题讨论】:
-
因为您在迭代时删除了元素。中途你已经删除了一半的元素和 bam,现在超出了范围。
-
remove()将后续剩余元素向下移动一个索引。因此,删除 5000 个元素后,最后一个索引是 5000。 -
如果您需要删除所有项目,只需使用
clear()
标签: java arraylist linked-list