私は HashMap のプロパティを読んでいました。そして、多くの票を持つSO に関する回答が見つかりました。
HashMap の Iterator はフェールセーフですが、Hashtable の列挙子はそうではありません。
JavaDocが言う間
このクラスのすべての「コレクション ビュー メソッド」によって返される反復子は、フェイルファストです。
実際、その回答に対する投票数は私を混乱させました。そうでなければ、フェイルファストのみだと思います。
誰か説明できますか?
私は HashMap のプロパティを読んでいました。そして、多くの票を持つSO に関する回答が見つかりました。
HashMap の Iterator はフェールセーフですが、Hashtable の列挙子はそうではありません。
JavaDocが言う間
このクラスのすべての「コレクション ビュー メソッド」によって返される反復子は、フェイルファストです。
実際、その回答に対する投票数は私を混乱させました。そうでなければ、フェイルファストのみだと思います。
誰か説明できますか?
HashMap のイテレータはフェイル ファストです 「java.util.concurrent」パッケージに含まれるコレクションにはフェイル セーフ イテレータがありますが、反復中に変更しようとすると ConcurrentModificationException がスローされます。コレクションを反復しながらコレクションを変更できます。主にマルチスレッド環境で使用
はい、あなたの理解は正しいです。
Fail-fast :チェックを積極的に行うことで、できるだけ早く失敗します。のイテレータは、基になる構造の変更を検出するとすぐに をHashMap
スローするため、フェイルファストです。ConcurrentModificationException
フェイルファストのみだと思います。
あなたは正しいです。その回答を書いた人は、おそらくフェイルファストとフェイルセーフの違いを理解していません。
実際、その回答に対する投票数は私を混乱させました。
多くの票が必ずしも SO Answer が正しいことを意味するわけではありません。その回答には他にもいくつかの問題がありました。IMO、それは受け取った多数の賛成票に値しません.
残念ながら、人々はさまざまな理由で Answers に投票するため、あらゆる種類の異常につながる可能性があります。
私もこれに戸惑いましたが、実際には非常に簡単です:
私たちが持っているとしましょう:
Hashtable<String, Integer> ht = new Hashtable<String, Integer>();
HashMap<String, Integer> hm = new HashMap<String, Integer>();
次に、hm に対して hm.keySet().iterator() を実行できます。これはイテレータを返し、高速で失敗します。一方、ht の場合、イテレータを返し、高速失敗する ht.keySet().iterator と、列挙型オブジェクトを返し、高速失敗しない ht.keys() の両方を実行できます。