Java 获取“;ConcurrentModificationException”;即使我使用迭代器?
我得到了ConcurrentModificationException,但我真的不明白为什么。。当我使用迭代器时,它不应该正常工作吗Java 获取“;ConcurrentModificationException”;即使我使用迭代器?,java,iterator,Java,Iterator,我得到了ConcurrentModificationException,但我真的不明白为什么。。当我使用迭代器时,它不应该正常工作吗 public void nextDay(){ int range = (10 - 0) + 1; ListIterator<User> it = this.socialNetwork.getPeopleInNetwork().listIterator(); while(it.hasNext())
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());
}
}
}
}
public void nextDay(){
整数范围=(10-0)+1;
ListIterator it=this.socialNetwork.getPeopleInNetwork().ListIterator();
while(it.hasNext()){
User=it.next();
int random=(int)(Math.random()*范围)+0;
如果(user.getFriends().size()否,则在迭代列表时无法修改列表,除非使用迭代器本身进行修改
如果计划在不使用迭代器的情况下修改原始列表,则应创建副本并迭代副本
否则,可以使用迭代器修改列表
查看ListIterator
的add
方法:
re“…即使我在使用迭代器…”
--循环中也有这样一个问题:this.socialNetwork.getPeopleInNetwork().add(…)
当您在不使用迭代器的情况下修改列表时,迭代器不会保护您免受并发修改。这应该是常识,不是?