2

私は HashMap のプロパティを読んでいました。そして、多くの票を持つSO に関する回答が見つかりました。

HashMap の Iterator はフェールセーフですが、Hashtable の列挙子はそうではありません。

JavaDocが言う間

このクラスのすべての「コレクション ビュー メソッド」によって返される反復子は、フェイルファストです。

実際、その回答に対する投票数は私を混乱させました。そうでなければ、フェイルファストのみだと思います。

誰か説明できますか?

4

5 に答える 5

1

HashMap のイテレータはフェイル ファストです 「java.util.concurrent」パッケージに含まれるコレクションにはフェイル セーフ イテレータがありますが、反復中に変更しようとすると ConcurrentModificationException がスローされます。コレクションを反復しながらコレクションを変更できます。主にマルチスレッド環境で使用

于 2013-09-09T07:34:38.587 に答える
1

はい、あなたの理解は正しいです。

Fail-fast :チェックを積極的に行うことで、できるだけ早く失敗します。のイテレータは、基になる構造の変更を検出するとすぐに をHashMapスローするため、フェイルファストです。ConcurrentModificationException

于 2013-09-09T07:38:29.437 に答える
1

フェイルファストのみだと思います。

あなたは正しいです。その回答を書いた人は、おそらくフェイルファストとフェイルセーフの違いを理解していません。

実際、その回答に対する投票数は私を混乱させました。

多くの票が必ずしも SO Answer が正しいことを意味するわけではありません。その回答にはにもいくつかの問題がありました。IMO、それは受け取った多数の賛成票に値しません.

残念ながら、人々はさまざまな理由で Answers に投票するため、あらゆる種類の異常につながる可能性があります。

于 2013-09-09T07:44:46.017 に答える
0

私もこれに戸惑いましたが、実際には非常に簡単です:

私たちが持っているとしましょう:

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() の両方を実行できます。

于 2015-02-12T22:30:35.497 に答える