我收到了ConcurrentModificationException但我真的不明白为什么..当我使用迭代器时它不应该工作正常吗?
public void nextDay(){
int range = (10 - 0) + 1;
ListIterator<User> it = this.socialNetwork.getPeopleInNetwork().listIterator();
while(it.hasNext()) {
User user = it.next();
int random = (int)(Math.random() * range) + 0;
if(user.getFriends().size()<=25){
try {
this.socialNetwork.getPeopleInNetwork().add(user.addFriend(new UserImpl("new","user")));
user.addFriend(this.socialNetwork.getPeopleInNetwork().get(random));
} catch (IllegalArgumentException | UserAlreadyInFriendListException e) {
logger.error(e.getMessage());
}
}else{
try {
this.socialNetwork.getPeopleInNetwork().add(user.addFriend(new UserImpl("new","user")));
this.socialNetwork.getPeopleInNetwork().add(user.addFriend(new UserImpl("new","user")));
this.socialNetwork.getPeopleInNetwork().add(user.addFriend(new UserImpl("new","user")));
user.addFriend(this.socialNetwork.getPeopleInNetwork().get(random));
} catch (IllegalArgumentException | UserAlreadyInFriendListException e) {
logger.error(e.getMessage());
}
}
}
}
答案 0 :(得分:3)
不,你在迭代时不能修改列表,除非你使用迭代器本身来修改它。
如果计划在不使用迭代器的情况下修改原始列表,则应创建副本并迭代副本。
否则,您可以使用迭代器修改列表。
查看add
的{{1}}方法:
http://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html#add(E)