gpt4 book ai didi

java - 从 ArrayList 中删除元素时出现异常?

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:00:50 34 4
gpt4 key购买 nike

我正在用随机整数填充 ArrayList al。然后,当我尝试删除它们时,出现了这些错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 5000 out-of-bounds for length 5000 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) at java.base/java.util.Objects.checkIndex(Objects.java:372) at java.base/java.util.ArrayList.remove(ArrayList.java:517) at 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("-----------------------------------------------------------------------------");

最佳答案

al.remove(i);

删除索引 i 处的元素。在删除开始时,您的列表有 10000 个项目。在循环的前 5000 次迭代之后,您的列表只有 5000。然后您调用 al.remove(5000),这在大小为 5000 的数组中不再被允许。在列表中有 5001 个元素并调用允许的 al.remove(4999) 之前的步骤中。

在循环中使用remove(0) 或在没有任何循环的情况下使用clear() 来删除所有元素。

您的主要错误可能是认为 remove(0) 和随后的 remove(1) 删除了数组的前 2 个元素。但事实并非如此。实际上发生的是第一个语句删除了第一个元素,之后原来的第二个元素变成了第一个,第三个变成了第二个,等等。所以 remove(1) 之后删除了原来的第三个元素。如果您继续该逻辑,您将永远不会删除最初的第二个元素(以及许多其他元素)。

关于java - 从 ArrayList 中删除元素时出现异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52995104/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com