Java 调用putAll时的ConcurrentModificationException

Java 调用putAll时的ConcurrentModificationException,java,hashmap,guava,concurrentmodification,Java,Hashmap,Guava,Concurrentmodification,我很难理解以下错误 假设您有一个类a,我在其中实现了以下方法: Map<Double,Integer> get_friends(double user){ Map<Double,Integer> friends = user_to_user.row(user); //friends.putAll(user_to_user.column(user)); return friends;} 我再次运行该程序,它崩溃并抛出concurrentModificationExce

我很难理解以下错误

假设您有一个类a,我在其中实现了以下方法:

Map<Double,Integer> get_friends(double user){

Map<Double,Integer> friends = user_to_user.row(user);
//friends.putAll(user_to_user.column(user));

return friends;}
我再次运行该程序,它崩溃并抛出concurrentModificationException。 需要注意的是,我正在创建表user_to_user,如下所示:

private HashBasedTable<Double,Double,Integer> user_to_user;//
user_to_user = HashBasedTable.create();
私有HashBasedTable用户对用户//
user_to_user=HashBasedTable.create();
更令人惊讶的是,当我交换填充朋友的方式时,我的意思是:

Map<Double,Integer> friends = user_to_user.column(user);
friends.putAll(user_to_user.row(user));
Map friends=user\u to\u user.column(用户);
putAll(user_to_user.row(user));
然后一切都会好起来的。
有什么想法吗?

问题是,
HashBasedTable
在内部实现为一个
Map
,并且
user\u to\u user.column(user)
的实现在修改与
user
关联的行的同时,在行上迭代


一个可行的替代方法是将
user\u复制到\u user.column(user)
到一个单独的
Map
中,然后再将其放入行中。

请遵循java命名约定。。
private HashBasedTable<Double,Double,Integer> user_to_user;//
user_to_user = HashBasedTable.create();
Map<Double,Integer> friends = user_to_user.column(user);
friends.putAll(user_to_user.row(user));