gpt4 book ai didi

java - 循环不遍历整个arraylist

转载 作者:行者123 更新时间:2023-11-29 10:05:47 25 4
gpt4 key购买 nike

我在尝试遍历存储餐厅对象的数组列表时遇到问题,但循环仅遍历五个元素中的三个。

我创建了一个测试方法来说明:

public void testLoop() {
ArrayList<Eatery> test = new ArrayList<Eatery>();
test = eateriesListDefault;
for(Eatery e : test) {
MyLog.e(TAG, "Name: " + e.getName());
}
for (int i = 0; i < eateriesListDefault.size(); i++) {
MyLog.e(TAG, "Name " + test.get(i).getName());
test.remove(i);
}
for(Eatery e : test) {
MyLog.e(TAG, "Name " + e.getName());
}
}

这里的测试将包含 5 个餐馆对象。第一个循环成功地打印了 5 个名字中的 5 个。第二个循环只删除了 3 个餐馆,因此最后一个循环打印了两个名字。

我试过用

for(Eatery e : eateriesListDefault) {
MyLog.e(TAG, "Name: " + e.getName());
test.remove(e);
}

代替第二个循环,但是我得到并发访问错误。

有人知道我做错了什么吗?

最佳答案

您在每次循环迭代中调用 eateriesListDefault.size()。同时,您正在调用 test.remove(i),它在每次迭代时将数组缩短 1。你的循环本质上是这样做的:

  1. 我 = 0大小 = 5继续前进

  2. 我 = 1大小 = 4继续前进

  3. 我 = 2大小 = 3继续前进

  4. 我 = 3大小 = 2停止

如果您的目标是打印出数组的第一个元素然后将其删除,您可能可以通过此循环到达那里:

while(!eateriesListDefault.isEmpty()) {
MyLog.e(TAG, "Name " + test.get(0).getName());
test.remove(0);
}

关于java - 循环不遍历整个arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8421979/

25 4 0