gpt4 book ai didi

try-catch 的 Java ArrayList 问题

转载 作者:行者123 更新时间:2023-11-29 06:36:58 25 4
gpt4 key购买 nike

我想在 try-catch 中清除一个 ArrayList。我确实知道我们可以使用 clear() 方法来做到这一点。但是当我尝试使用 for 循环清除每个项目时。结果如下:

public class ArrayListTryCatch {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList();
int oldsize = list.size();
try {
list.add(20);
list.add(30);
list.add(40);
int wrongDivide = 1 / 0;
} catch (Exception e) {
for (int i = 0; i < list.size(); i++) {
System.out.println("deleted item: " + list.get(oldsize));
list.remove(i);
}
}
System.out.println(list.size());
System.out.println("after try catch: ");
for (Integer e : list) {
System.out.println(e);
}
}
}

结果是:

deleted item: 20
deleted item: 30
1
after try catch:
30

我想它一定是空的ArrayList。我有什么问题吗?

最佳答案

问题与 try/catch 无关,与此循环有关:<​​/p>

for (int i = 0; i < list.size(); i++) {
System.out.println("deleted item: " + list.get(oldsize));
list.remove(i);
}

这只会删除所有其他元素。 (它还会打印与实际删除的项目不同的项目,这很奇怪......)

假设您从 A、B、C、D、E 开始。

在第一次迭代中,i 将为 0,大小将为 5,您将删除 A。这将留下 B、C、D、E。

在第二次迭代中,i 将为 1,大小将为 4,您将删除 C(现在位于位置 1)。这将留下 B、D、E。

在第三次迭代中,i 将为 2,大小将为 3,您将删除 E(现在位于位置 2)。这将留下 B、D。

接下来,i 为 3,大小为 2,循环终止。

选项:

  • 结束而不是开始移除,以避免重新排序(并提高效率)
  • 始终从前面移除,直到大小为0

例如:

// Work from the back...
for (int i = list.size() - 1; i >= 0; i--) {
System.out.println("deleted item: " + list.get(i));
list.remove(i);
}

或者(效率较低):

while (list.size() > 0) {
System.out.println("deleted item: " + list.get(0));
list.remove(0);
}

关于try-catch 的 Java ArrayList 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19154128/

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