実行時は、temp = keysit.next()を指定したときに例外が発生したことを示します。私はこれが2回目にkeysit = keys.iterator()を再定義したときに気をつけていたと思ったが、おそらく私はそのポイントを見逃している。助言がありますか?Setを使用した場合のConcurentModificationException
Map<Integer, Set<String>> lhm = new LinkedHashMap<Integer, Set<String>>();
public void sortMap() {
Set<Integer> keys = hm.keySet();
Iterator<Integer> keysit;
int iterations = keys.size();
int smallest;
int temp;
for(int i=0; i<iterations; i++) {
keysit = keys.iterator();
smallest = keysit.next();
keysit = keys.iterator();
while(keysit.hasNext()) {
temp = keysit.next();
if(temp<smallest)
smallest = temp;
lhm.put(smallest, lhm.get(smallest));
keys.remove(smallest);
}
}
System.out.println(lhm);
}
スレッドの安全性がここでの問題ではないのConcurrentHashMapを使用することです。問題は、反復処理中に要素から要素を削除することです。反復子の 'remove()'メソッドがサポートされている場合は、その代わりにイテレータの 'remove()'メソッドを使うべきです。 –