2013-07-10 152 views
0

我在理解以下錯誤時遇到困難。調用putAll時發生ConcurrentModificationException異常

假設你有一個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;} 

然後在主我做到以下幾點:

A obj = new A(); 
Map<Double,Integer> temp = obj.get_friends(6); 

嗯,這工作正常。然而,當我取消A類的follwing線:

friends.putAll(user_to_user.column(user)); 

,我再次運行該程序,它崩潰並引發了我ConcurrentModificationException的。 應當指出的是,我創建的表user_to_user如下:

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)); 

然後everyting會正常工作。 有什麼想法?

+3

請按照java命名約定.. – Mik378

回答

0

問題是HashBasedTable內部爲Map<Double, Map<Double, Integer>>實施,並且的user_to_user.column(user)的實施,同時遍歷行你修改與user相關聯的行。

一個可行的替代方法是將user_to_user.column(user)複製到單獨的Map中,然後再放入行中。

+0

太棒了!你是對的 :) – user764186

相關問題