【发布时间】:2019-03-30 09:50:38
【问题描述】:
我正在用随机整数填充 ArrayList al。
然后,当我尝试删除它们时,我收到了这些错误:
线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引 长度为 5000 的 5000 出界 java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) 在 java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) 在 java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) 在 java.base/java.util.Objects.checkIndex(Objects.java:372) 在 java.base/java.util.ArrayList.remove(ArrayList.java:517) 在 a2_40038465.ListTester.main(ListTester.java:137)
这是我的代码:
System.out.println("-----------------------------------------------------------------------------");
System.out.println("Inserting at the beginning...");
long startTime4 = System.currentTimeMillis();
for(int i=0; i<10000; i++) {
al.add(0, rand.nextInt(20001));
}
long endTime4 = System.currentTimeMillis();
long elapsed4 = endTime4 - startTime4;
System.out.println("Time elapsed: " + elapsed4);
System.out.println("-----------------------------------------------------------------------------");
System.out.println("Removing from beginnig...");
long startTime19 = System.currentTimeMillis();
for(int i=0; i<10000; i++) {
al.remove(i);
}
long endTime19 = System.currentTimeMillis();
long elapsed19 = endTime19 - startTime19;
System.out.println("Time elapsed: " + elapsed19);
System.out.println("-----------------------------------------------------------------------------");
【问题讨论】:
-
当我将其更改为
i<5000时,它可以工作。 -
ArrayList从零开始,所以在大小为 5000 的List中,最后一个索引是 4999 -
如果要从头删除,请使用
remove(0),而不是remove(i)。也许尝试调试它以查看发生了什么,无论是使用调试器还是在纸上。 -
删除前 5000 个元素后,只剩下 5000 个。所以你的索引现在超出了范围。
-
@Qwerty0987 “为什么限制为 5000?”因为您已经删除了前 5000 个元素。
标签: java list arraylist indexoutofboundsexception