我有一个小问题。我试图从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