我遇到了一個問題,我試圖通過存儲餐館對象的arraylist迭代,但循環只能通過五個元素中的三個。循環不遍歷整個ArrayList
我創建的測試方法來說明:
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);
}
試過,但我得到一個併發訪問錯誤。
有誰知道我在做什麼錯?
首先,你不應該嘗試從集合中刪除值時使用'foreach'循環。這是您的併發訪問錯誤的原因。請參閱[本頁](http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html)。你還可以解釋爲什麼你發出一個'新的ArrayList'調用只在下一行創建一個賦值? – Grambot
我們能否看到eateriesListDefault會是什麼樣子?或許不是「for(Eatery e:test)」作爲第一個循環,您應該嘗試模仿第二個循環,以便將蘋果與蘋果進行比較。我只是想排除任何索引問題。 – dispake