1. HashMap の実装原理について教えてください。
HashMap の概要: HashMap は、ハッシュ テーブルに基づく Map インターフェイスの非同期実装です。この実装では、すべてのオプションのマッピング操作が提供され、null 値と null キーが許可されます。このクラスはマッピングの順序を保証せず、特に順序が不変であることを保証しません。
HashMap データ構造: Java プログラミング言語には、2 つの最も基本的な構造があります。1 つは配列、もう 1 つはシミュレートされたポインター (参照) です。すべてのデータ構造は、これら 2 つの基本構造を使用できます。 HashMap 構造も例外ではありません。 HashMap は実際には、配列とリンク リストを組み合わせた「リンク リスト ハッシュ」データ構造です。
(推奨チュートリアル: java クイック スタート )
要素をハッシュマップに入れるとき、まずキーのハッシュコードに基づいてハッシュ値を再計算し、これを取得するためのハッシュ値 配列内の要素の位置 (添字) 配列のこの位置にすでに他の要素が格納されている場合、この位置の要素は、新しく追加された要素を含むリンク リストの形式で格納されます。チェーンの先頭に配置されるものと、最初に追加された要素です。チェーンの最後に配置します。配列内のその位置に要素がない場合は、配列内のその位置に要素を直接配置します。
HashMap の実装は Jdk 1.8 で最適化されていることに注意してください。リンク リスト内のノード データが 8 を超えると、リンク リストはクエリ効率を向上させるために赤黒ツリーに変換されます。元の O(n) から O(logn)
2 へ、HashSet の実装原理について話しますか?
HashSet の最下層は HashMap で実装されます
HashSet の値は HashMap のキーに格納されます
HashMap の値は PRESENT
# で統一されます## (関連学習:java一般的な面接の質問)
3. ArrayList と LinkedList の違いは何ですか? 最も明らかな違いは、ArrrayList の基礎となるデータ構造は配列であり、ランダム アクセスをサポートするのに対し、LinkedList の基礎となるデータ構造は双方向の循環リンク リストであり、ランダム アクセスをサポートしないことです。添え字を使用して要素にアクセスする場合、ArrayList の時間計算量は O(1) ですが、LinkedList の時間計算量は O(n) です。 4. 配列とリストの間で変換するにはどうすればよいですか? リストを配列に変換: ArrayList の toArray メソッドを呼び出します。 配列をリストに変換: 配列の asList メソッドを呼び出します。 5. ArrayList と Vector の違いは何ですか? Vector は同期されていますが、ArrayList は同期されていません。ただし、反復中にリストに変更を加えたい場合は、CopyOnWriteArrayList を使用する必要があります。 ArrayList は Vector より高速で、同期によりオーバーロードされません。 ArrayList は、コレクション ツール クラスを使用して同期リストと読み取り専用リストを簡単に取得できるため、より汎用性が高くなります。 推奨される関連ビデオ チュートリアル:以上が2020 年の新しい Java インタビューの質問 - コンテナー (2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。