循环不遍历整个arraylist

sam*_*sam 1 java android

我有一个问题,我试图迭代存储餐馆对象的arraylist但循环只通过五个元素中的3个.

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

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());
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

我试过用

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

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

有谁知道我做错了什么?

Dee*_*eeV 7

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

  1. i = 0 size = 5继续

  2. i = 1 size = 4继续

  3. i = 2 size = 3继续

  4. i = 3尺寸= 2停止

如果你的目标是打印出数组的第一个元素然后删除它,你可能会通过这个循环到达那里:

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