Java コレクションの面接でよくある質問

1. Map コレクションの put メソッドについて話します。

        まずキーと値をノード オブジェクトにカプセル化してから、最下層で k のハッシュコード メソッドを呼び出してハッシュコード値を取得し、要素が存在しない場合はハッシュ アルゴリズムを使用してこの値を配列の添字に変換します。添え字の位置にある場合、ノードは次のようになります。オブジェクトはこの位置に追加されます。この位置に要素がある場合、ノード オブジェクトのキーと、この位置のリンク リストの各ノードのキーは等しくなります。どちらも false を返す場合、ノード オブジェクトはリンク リストの最後に追加されます (jdk1.8 以降は最後に追加されます)。true を返すメソッドがある場合、ノードの値は上書きされます。

2. Map コレクションの get メソッドについて説明します。

        最下層はキーの hashcode メソッドを呼び出してハッシュコード値を取得し、ハッシュ アルゴリズムを使用してこの値を配列の添え字に変換します。添え字の位置に要素がない場合、get メソッドは null を返します。その位置に要素がある場合、その位置にあるキーとリンク リストの各ノードのキーは等しいです。各メソッドが false を返した場合、get メソッドによって返される値も null になります。 trueを返すequalsメソッドの場合、getメソッドはノードの値を返します。

3. Map コレクションに配置されたキー オブジェクトが hashcode メソッドとquals メソッドを書き換えるのはなぜですか

       ハッシュコードメソッドが書き換えられない場合、ハッシュ分布は不均一になります。また、equals を書き換える理由は、キーがオブジェクトであり、オブジェクトの内容を比較する必要があるためです。

4. HashMap コレクションの主要部分の機能:

        順序がなく、反復不可能です。
        なぜ順序が狂うのか: ハッシュ アルゴリズムによって得られる結果はランダムで
        再現性がないため、どのように保証されるのでしょうか? equals メソッドは、HashMap コレクションのキーが重複しないようにするために使用されます。キーが重複している場合、値は上書きされます。
        HashSet は HashMap コレクションのキー部分に配置されるため、Hashset 内の要素も hashcode メソッドとquals メソッドを書き換える必要があります。

5. 不均一なハッシュ分散とは次のとおりです。

        ‌ハッシュコードメソッドの戻り値が全て同じ値の場合は一方向連結リストとなる
        ‌ハッシュコードメソッドの戻り値が全て異なる場合は純粋な配列となる

6. ハッシュマップの機能:

        まず第一に、その最下層はハッシュ テーブル データ構造であり、スレッドセーフではありません。デフォルトの初期化容量は 16 で、デフォルトの負荷係数は 0.75 です。このデフォルトの負荷係数は、基になる配列の容量がHashMap コレクションが 75% に達すると、配列が拡張され始めます。拡張が 2 倍になり、初期容量を手動で指定する場合、この容量の値は 2 のべき乗である必要があります。これは、均一なハッシュ分散を実現し、アクセス効率を向上させるために必要です。ハッシュマップの。

        容量の初期化時に渡された値が 2 のべき乗ではない場合、その数値をその数値より大きい最小の 2 のべき乗に変換するメソッドが呼び出されます。単一リンク リストが 8 要素を超えると、単一リンク リストは
        赤に変わります。 黒ツリー構造。リンク リスト内の要素が 8 未満の場合、赤と黒の数字が単一のリンク リストに戻ります。

7.Hashtable集合:

        ハッシュテーブルの初期容量は 11、負荷率は 0.75、拡張: 元の容量 * 2+1、スレッドセーフです。

8. Hashtable コレクションと HashMap コレクションの違い:

        Hashtable コレクションのキーと値には null を格納できません。また、
        スレッド セーフな HashMap コレクションのキーと値は、スレッド セーフではない null になる可能性があります。

9. その他

Properties コレクション:
Properties は、Hashtable コレクションを継承する Map コレクションであり、Properties のキーと値は両方とも String 型です。
プロパティは属性クラス オブジェクトと呼ばれます。
プロパティはスレッドセーフです。
保存: setproperties
取得: getproperties

 

TreeMap コレクションの最下層はバイナリ ツリーです

10.arraylist集合:

        最下層はオブジェクト配列で、デフォルトの初期化容量は 10 (最下層は最初に空の配列を作成し、最初のデータを追加するときの初期化容量は 10)、配列リストは線形安全ではありません。 arraylist は arraylist を 1.5 倍に拡張した
もので、クエリ効率は高く、指定位置へのデータの挿入や削除の効率は低いですが、arraylist コレクションの最後に要素を追加や削除すると効率が良くなります。それもかなり高い

11.ヴォエキャットコレクション

        最下層はオブジェクト配列で、デフォルトの初期容量は 10 で、その 2 倍の容量になります。voecat はスレッドセーフであるため、効率は arraylist コレクションの効率よりも低くなります。

12. リンクリスト:

        基礎となる二重リンクリストであるため、要素の挿入または削除の効率は高くなりますが、クエリ効率は低くなり、リンクリストは線形安全ではありません

13. 配列リストとリンクリストの違い:


        arraylist の最下層はオブジェクト配列であり、 linkedlist の最下層は        双方向リンク
        リストである
        ため、arraylist を使用することは、linkedlist を使用すること以上のものです。

14. 配列リストとベクトルの違い

        まず、これら 2 つのコレクションの最下層はオブジェクト配列で、デフォルトの初期化容量は 10 ですが、配列リストは 1.5 倍、ベクトルは 2 倍の拡張になります。配列リストはスレッドセーフではなく、ベクトルです
        。はスレッドセーフであるため、効率の点では Arraylist の方が効率的であり、開発では arraylist が優先されます。

15. set インターフェイス (順序付けされておらず、反復不可能)

        ハッシュセット: 基礎となるハッシュマップ コレクションの重要な部分

        treeset: 最下層はバイナリ ツリーであり、treeset は並べ替え可能です。

 

おすすめ

転載: blog.csdn.net/qq_26112725/article/details/131096775