我有一個小問題。我試圖從ArrayList中刪除一個對象,但不會發生更改。ArrayList:在for循環中刪除對象
下面是代碼示例:
List<Room> rooms = new CopyOnWriteArrayList<Room>();
rooms.addAll(fp.getRooms());
int counter = 1;
for(Room r: rooms){
for(Square s: r.getDoor()){
r.getDoor().remove(s);
String name = String.valueOf(fp.getRooms().size() + counter);
Room doorRoom = new Room(name, false, s, s);
rooms.add(doorRoom);
counter++;
}
}
fp.setRooms(rooms);
我試圖刪除對象s
,並用新的對象doorRoom
更換。
輸出:
First> [S: 11:7; true, S: 11:15; true, S: 11:20; true] Second> [S: 11:7; true, S: 11:15; true, S: 11:20; true]
而且我很期待:
First> [S: 11:7; true, S: 11:15; true, S: 11:20; true] Second> [S: 11:15; true, S: 11:20; true]
的等等...
問題是什麼?
謝謝,我很樂意收到您的回覆!
你可能想告訴我們,正是你所看到的發生,哪些是你希望在您認爲它沒有做什麼,你認爲它應該做的每一點發生。 (事實上,只要這樣做,你可能會自己找出問題,但是如果不是,我們有一個出發點來幫助你。) – Wormbo 2013-02-24 20:09:26
可能是迭代過程中混合添加/刪除的問題。但是我找不到解釋這是否合法的文檔。 – djechlin 2013-02-24 20:11:04
@djechlin我認爲,但http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/CopyOnWriteArrayList.html聲明列表永遠不會拋出ConcurrentModificationException。儘管OP在添加新房間實例時從未刪除「r」房間。 – mabi 2013-02-24 20:14:28