どのコレクションがJavaで速く失敗しますか?

質問者:Xufeng Verduguez |最終更新日:2020年5月23日
カテゴリ:テクノロジーおよびコンピューティングプログラミング言語
3.9 / 5 (471ビュー。21投票)
Javaでのフェイルファストとフェイルセーフのイテレータ:
フェイルファストイテレータフェイルセーフイテレータ
フェイルファストイテレータは、コレクションを反復処理している間、コレクションを変更することを許可しません。フェイルセーフイテレータを使用すると、コレクションを反復処理しながらコレクションを変更できます

また、知っておくべきことは、どのコレクションが速く失敗するのかということです。

ArrayListのイテレータ、HashMapクラスは、失敗の例です-高速イテレータ。フェイルセーフイテレータは、コレクションの反復中にコレクションが構造的に変更された場合でも、例外をスローしません。

また、ArrayListは速く失敗しますか? ArrayListのIteratorはフェイルファストであるため、Iteratorを使用してArrayListを反復処理しているときに、Iterator自体によって提供されるaddおよびremove以外のメソッドによって基になるArrayListが変更されると、ConcurrentModificationExceptionがスローされ、ベイルアウトします。

また、Javaのフェイルセーフとフェイルファストとは何ですか?

フェイルセーフイテレータは、コレクションの反復中にコレクションが変更された場合でも、例外をスローしないことを意味します。一方、 Fail-コレクションの反復中にコレクションが変更された場合、高速イテレータは例外(ConcurrentModificationException)をスローします。

ConcurrentHashMapはどのようにフェイルセーフですか?

ConcurrentHashMap 、CopyOnWriteArrayListなどの並行パッケージはフェイルセーフです。安全なイテレータ-上記のコードでは、私たちは失敗を使用しています。したがって、反復中に新しい要素がコレクションに追加されても、例外はスローされません。

39関連する質問の回答が見つかりました

ConcurrentModificationExceptionとは何ですか?

ConcurrentModificationExceptionは、オブジェクトの同時変更が許可されていない場合に、オブジェクトの同時変更を検出したメソッドによってスローされる可能性のあるRuntimeExceptionです。例外は、1つのスレッドがオブジェクトのコントラクトに違反している場合でもスローされます。

HashMapとHashtableの違いは何ですか?

1.HashMapは同期されていません。これはスレッドセーフではなく、 Hashtableが同期されているのに対し、適切な同期コードがないと多くのスレッドで共有できません。 HashMapは1つのnullキーと複数のnull値を許可しますが、 Hashtableはnullキーまたは値を許可しません。

Javaで最初に失敗するのは何ですか?

問題が発生すると、フェイルファストシステムすぐに失敗します。 Javaでは、イテレータを使用してこの動作を見つけることができます。コレクションオブジェクトでイテレータを呼び出し、別のスレッドがコレクションオブジェクトを変更しようとすると、同時変更例外がスローされます。これはフェイルファストと呼ばれます。

JavaのmodCountとは何ですか?

JavaのArrayListのとはConcurrentModificationException
イテレータを使用して、ArrayList要素をトラバースできます。ここで、 modCountは変更カウントを保持するArrayList変数であり、add、remove、またはtrimToSizeメソッドを使用するたびにインクリメントします。

イテレータスレッドはJavaで安全ですか?

イテレータスレッドセーフではありません。基になるコレクションが反復中に変更されると、ConcurrentModificationExceptionがスローされます。同期されたコレクションのイテレータでさえ、スレッドセーフではありません。手動で同期する必要があります。 1つの例外は、反復中にスナップショットを保持するCopyOnWriteArrayListです。

列挙がイテレータよりも速いのはなぜですか?

与えられたマイクロベンチマークの例では、列挙がIteratorよりも高速である理由は、最初にテストされるためです。 ;)長い答えは、ループが10,000回繰り返されたときに、HotSpotコンパイラがメソッド全体を最適化するというものです。

CopyOnWriteArrayListとは何ですか?

Java CopyOnWriteArrayListは、ArrayListのスレッドセーフなバリアントであり、基になる配列の新しいコピーを作成することにより、すべての変更操作(add、setなど)が実装されます。不変のスナップショットスタイルのイテレータメソッドは、イテレータが作成された時点での配列の状態への参照を使用します。

JavaでのConcurrentHashMapの使用とは何ですか?

ConcurrentHashMapは、Hashtableの代替として導入され、Hashtableでサポートされるすべての関数に、 ConcurrentHashMapがMapを分割できるようにする「同時実行レベル」と呼ばれる追加機能を提供します。 ConcurrentHashMapを使用すると、複数のリーダーがブロックせずに同時に読み取ることができます。

listIteratorはフェイルセーフですか?

1.イテレータの使用:ArrayList iterator()およびlistIterator ()メソッドによって返されるイテレータは高速で失敗します。イテレータの作成後にリストが構造的に変更された場合、イテレータ自体のremoveまたはaddメソッド以外の方法で、イテレータはConcurrentModificationExceptionをスローします。

なぜJavaでコレクションを使用するのですか?

コレクションは、データが動的である状況で使用されます。コレクションを使用すると、要素を追加したり、要素や他の操作のホストを削除したりできます。右の文脈のための右のコレクションを選択することでき、Javaのコレクションの数があります。データ構造とアルゴリズムで遊ぶことができます。

Javaのレガシークラスとは何ですか?

レガシークラスとインターフェイスは、以前のバージョンのJavaでコレクションフレームワークを形成したクラスとインターフェイスであり、現在どのように再構築または再設計されているかを示しています。それらはフレームワークと完全に互換性があります。すべてのレガシークラスが同期されます。レガシー=古いJavaバージョンの遺産。

Javaでのコレクションとはどういう意味ですか?

Javaコレクションは、オブジェクトのグループを格納および操作するためのアーキテクチャを提供するフレームワークです。 Javaコレクションは、検索、並べ替え、挿入、操作、削除など、データに対して実行するすべての操作を実行できます。 Javaコレクションとは、単一のオブジェクト単位を意味します。

ベクターは速く失敗しますか?

ベクター-フェイルセーフまたはフェイル-イテレータ、listIterator、列挙を使用した高速反復、および拡張forループ。 Vectorによって返されるイテレータは失敗します-高速です。反復中に要素を追加または削除するなど、 Vectorに加えられた構造上の変更は、javaをスローすることを意味します。

イテレータと列挙の違いは何ですか?

列挙型イテレータは、Javaの2つのインターフェースです。 Collectionオブジェクトの要素をトラバースするために使用されるutilパッケージ。列挙を使用すると、Collectionオブジェクトのみをトラバースできます。ただし、 Iteratorを使用すると、コレクションをトラバースしているときに要素を削除することもできます。

どのイテレータがConcurrentModificationExceptionをスローできますか?

5つの答え。 ConcurrentModificationExceptionIteratorによってスローされません。 remove()は、反復中にコレクションを変更するための許可された方法であるためです。

リストイテレータJavaとは何ですか?

Iteratorと同様に、 ListIteratorJava Iteratorであり、 List実装オブジェクトから要素を1つずつ反復するために使用されます。 Iteratorとは異なり、CRUD(CREATE、READ、UPDATE、DELETE)の4つの操作すべてをサポートします。 Iteratorとは異なり、 ForwardDirectionとBackwardDirectionの両方の反復をサポートします。

コレクションとJavaのコレクションの違いは何ですか?

コレクションとコレクションの主な違いは、コレクションはインターフェイスであり、コレクションはクラスであるということです。コレクションは、リスト、セット、およびキューの基本インターフェースです。コレクションは、 Javaコレクションフレームワークのルートレベルのインターフェースです。 Java Collection Frameworkのほとんどのクラスは、このインターフェースを継承しています。