ホームページ  >  記事  >  Java  >  Java コレクションのインタビューの質問の違い

Java コレクションのインタビューの質問の違い

(*-*)浩
(*-*)浩オリジナル
2019-11-29 15:49:081673ブラウズ

Java コレクションのインタビューの質問の違い

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

HashMap と Hashtable は両方とも Map インターフェイスを実装しているため、多くの機能は非常に似ています。ただし、次のような違いがあります。HashMap ではキーと値を null にすることができますが、Hashtable ではキーや値を null にすることができません。 (推奨される学習: Java インタビューの質問 )

Hashtable は同期ですが、HashMap は同期しません。したがって、HashMap はシングルスレッド環境に適しており、Hashtable はマルチスレッド環境に適しています。

HashMap は、アプリケーションによって反復できるキーのコレクションを提供するため、HashMap はフェイルファストです。一方、Hashtable はキーの列挙を提供します。

一般に、Hashtable はレガシー クラスであると考えられています。

配列 (Array) とリスト (ArrayList) の違いは何ですか? ArrayList の代わりに Array を使用する必要があるのはどのような場合ですか?

Array と ArrayList の違いを以下に示します。

Array には基本タイプとオブジェクト タイプを含めることができますが、ArrayList にはオブジェクト タイプのみを含めることができます。

Array のサイズは固定されており、ArrayList のサイズは動的に変化します。

ArrayList は、addAll()、removeAll()、iterator() などのメソッドと機能をさらに提供します。基本的な種類のデータの場合、コレクションはオートボックス化を使用してコーディングの労力を軽減します。ただし、固定サイズのプリミティブ データ型を扱う場合、このアプローチは比較的遅くなります。

ArrayList と LinkedList の違いは何ですか?

ArrayList と LinkedList はどちらも List インターフェイスを実装していますが、次のような違いがあります:

ArrayList はインデックスベースのデータ インターフェイスであり、その最下層は配列です。 O(1) の時間計算量で要素へのランダム アクセスを実行できます。同様に、LinkedList はデータを要素のリストの形式で保存します。各要素は前後の要素にリンクされます。この場合、要素を見つける時間計算量は O( n) です。

ArrayList と比較して、LinkedList の挿入、追加、削除操作は高速です。これは、要素がコレクション内の任意の位置に追加されるときに、配列のようにサイズを再計算したりインデックスを更新したりする必要がないためです。

LinkedList は、各ノードに対して 2 つの参照 (前の要素を指し、もう 1 つは次の要素を指す) を格納するため、ArrayList より多くのメモリを消費します。

ArrayList と LinkedList を参照することもできます。

Comparable インターフェイスと Comparator インターフェイスは何をしますか?それらの違いを列挙してください。

Java は、compareTo() メソッドを 1 つだけ含む Comparable インターフェイスを提供します。このメソッドは 2 つのオブジェクトを並べ替えることができます。具体的には、入力オブジェクトが既存のオブジェクトより小さい、等しい、または大きいことを示す負の数、0、および正の数を返します。

Java は、compare() と equals() という 2 つのメソッドを含む Comparator インターフェイスを提供します。 Compare() メソッドは 2 つの入力パラメータを並べ替えるために使用され、負の数 0 を返します。正の数は、最初のパラメータが 2 番目のパラメータより小さい、等しい、または大きいことを示します。

equals() メソッドには、入力パラメーターがコンパレーターと等しいかどうかを判断するために使用されるパラメーターとしてオブジェクトが必要です。このメソッドは、入力パラメータがコンパレータでもあり、入力パラメータと現在のコンパレータの並べ替え結果が同じである場合にのみ true を返します。

HashSet と TreeSet の違いは何ですか?

HashSet はハッシュ テーブルによって実装されるため、その要素には順序がありません。 add()、remove()、contains() メソッドの時間計算量は O(1) です。

一方、TreeSet はツリー構造で実装されており、その中の要素は順序付けされています。したがって、add()、remove()、contains() メソッドの時間計算量は O(logn) です。

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

ConcurrentHashMap は、HashMap のスレッドセーフな実装です。主な違いは次のとおりです:

ConcurrentHashMap はバケット配列全体をセグメントに分割し、ロック ロックを使用して各セグメントを保護します。Hashtable の syn キーワード ロックと比較して粒度が細かく、一部、同時実行パフォーマンスが向上します。より良い。 HashMap にはロック機構がなく、スレッドセーフではありません。

HashMap のキーと値のペアでは null が許可されますが、ConCurrentHashMap では null が許可されません。

JDK8 以降、ConcurrentHashMap では CAS アルゴリズムを使用した新しい実装方法が可能になりました。

List、Set、Map は Collection インターフェイスから継承しますか?

List と Set はそうですが、Map はそうではありません。 Map は Key-Value ペアのマッピング コンテナであり、List や Set とは明らかに異なります。Set は分散した要素を格納し、要素の重複は許可されません (数学のセットにも同じことが当てはまります)。List は線形構造を持つコンテナであり、数値に適しており、要素へのインデックスアクセス。

ArrayList、Vector、LinkedList のストレージのパフォーマンスと特徴を教えてください。

ArrayList と Vector はどちらも配列を使用してデータを保存します。配列要素の数は、要素を追加および挿入できるように、実際に保存されるデータよりも大きくなります。どちらも要素にシリアル番号で直接インデックスを付けることができますが、要素の挿入には次の操作が必要です配列要素の移動などのメモリ操作のため、データのインデックス付けは高速ですが、データの挿入は低速です。Vector は同期メソッド (スレッド セーフ) を使用するため、通常、そのパフォーマンスは ArrayList よりも劣ります。

LinkedList は、二重リンク リストを使用してストレージを実装します (追加の参照を通じてメモリ内に散在するメモリ ユニットを関連付け、シリアル番号でインデックスを付けることができる線形構造を形成します。このチェーン ストレージ方法は、連続ストレージ方法と一致します。配列の (実際にはメモリ使用率が高くなります) と比較すると、シリアル番号によるデータのインデックス付けは前方または後方の走査が必要ですが、データを挿入するときは、この項目の前後の項目を記録するだけでよいため、挿入は速度が速くなります。

Vector はレガシー コンテナです (Hashtable、Dictionary、BitSet、Stack、Properties に加えて、初期の JDK で使用されていたコンテナもすべてレガシー コンテナです)。使用は推奨されなくなりましたが、ArrayList と LinkedListedスレッドセーフではありません。複数のスレッドが同じコンテナーを操作する必要がある場合は、使用する前に、ツール クラス Collections の synchronizedList メソッドを使用してコンテナーをスレッドセーフなコンテナーに変換できます (これは、実際には装飾の最良の例です)モードでは、オブジェクトが別のクラスのコンストラクターに渡されて、新しいオブジェクトが作成され、新しい機能が追加されます)。

要素を保存するときの 3 つのインターフェイス List、Map、Set のそれぞれの特徴は何ですか?

List は順序付けされたコレクションです。このインターフェイスを使用すると、各要素の挿入位置を正確に制御できます。ユーザーは、Java の配列と同様に、インデックス (配列の添え字に似たリスト内の要素の位置) を使用してリスト内の要素にアクセスできます。

Set は、重複する要素を含まないコレクションです。つまり、任意の 2 つの要素 e1 と e2 には e1.equals(e2)=false があり、Set には最大 1 つの null 要素があります。

Map インターフェイス: Map は Collection インターフェイスを継承しないことに注意してください。Map はキーと値のマッピングを提供します

以上がJava コレクションのインタビューの質問の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。