Iteratorは、for文でMapの全要素に
アクセスするときに使用すると
便利な機能です。
Mapにいくつか要素がはいっているとします。
全要素を表示するには、以下のようにします。
Set set = map.keySet();
for(Iterator i = set.iterator(); i.hasNext();){
System.out.println(map.get(i.next());
}
しかし、Iteratorをスレッド間で使用する場合、
注意しなければならないことがあります。
それは、Iteratorでfor文をまわしている間に
put等でMapに要素を追加することです。
要素を変更すると、
java.util.ConcurrentModificationException
が投げられてしまいます。
これを回避するには、Iteratorを使用する場所と
putをする場所で、Mapのインスタンスに対して
synchronizedしてあげます。
// Iteratorを使用する場所
synchronized(map){
上の赤い部分。
}
// putする場所
synchronized(map){
map.put( key, value);
}
こうすればOKです。
今日はこれまで。
でわでわ( ̄▽ ̄)ノ♪