新しいキーを追加して構造を変更しない限り、危険はないと思いますConcurrentModificationException。
つまり、このようなコードは設計上合法です。
NavigableMap<Integer,String> nmap =
new TreeMap<Integer,String>();
nmap.put(1, "One");
nmap.put(2, "Two");
nmap.put(3, "Three");
nmap.put(4, "Four");
nmap.put(5, "Five");
NavigableSet<Integer> nkeys =
nmap.navigableKeySet().subSet(2, true, 4, true);
for (Integer key : nkeys) {
nmap.put(key, "Blah");
}
System.out.println(nmap);
// prints "{1=One, 2=Blah, 3=Blah, 4=Blah, 5=Five}"
OpenJDKバージョンのソースコードも見て、これをバックアップしています。ここでは、が追加modCount++;された場合にのみ実行されます。new Entry
(TreeMapで、modCountはとして宣言されてprivate transietいますが、そのアナログはAbstractListで宣言されており、検出の目的で構造変更protected transientの数をカウントするための使用目的が文書化されてConcurrentModificationExceptionいます)。
さらに、のドキュメントでは、TreeMap構造変更としてカウントされるものを明示的に明確にしています。
構造変更とは、1つ以上のマッピングを追加または削除する操作です。既存のキーに関連付けられた値を変更するだけでは、構造的な変更ではありません
上記のすべてに基づいて、はい、put新しいキーと値のペアを追加しないaは構造上の変更ではないため、を引き起こさないと言いConcurrentModificationExceptionます。