1. ArrayList と Vector の違いについて話しましょう
(その他の推奨される面接の質問: Java 面接の質問 )
1. 同期性: Vector はスレッド セーフです。スレッド セーフを実現するには synchronized を使用しますが、ArrayList はスレッド セーフではありません。コレクションにアクセスするスレッドが 1 つだけの場合は、ArrayList を使用するのが最善です。スレッド セーフを考慮すると効率が高くなります。
複数のスレッドがコレクションにアクセスする場合は、スレッド セーフなコードを考えて作成する必要がないため、Vector を使用するのが最善です。
2. データ容量の増加: どちらも初期容量サイズがあり、線形連続ストレージ スペースを使用します。保存された要素の数が容量を超えると、両方のストレージ スペースを増やす必要があり、Vector が増大します。元の値、ArrayList は元の値の 0.5 倍増加します。
2. ArrayList スレッドが安全でないのはなぜですか?
ArrayList に要素を追加する操作は 2 つのステップで実行されます。ステップは、追加する要素を object[size] の位置に格納することです。2 番目のステップでは、size の値を 1 ずつ増やします。
このプロセスはマルチスレッド環境ではアトミックであることが保証されていないため、ArrayList はマルチスレッド環境ではスレッドアンセーフです。
(関連チュートリアルの推奨事項: java 入門チュートリアル)
3. HashMap、LinkedHashMap、および TreeMap の違いは何ですか?
1. HashMap は最も一般的に使用される Map で、キーの hashCode 値に応じてデータを格納し、キーに応じて値を直接取得でき、アクセス速度が非常に速いです。 HashMap では、1 つのレコードのキーが null になることのみが許可され、複数のレコードの値が null になることは許可されません。
HashMap はスレッド同期をサポートしていません。つまり、複数のスレッドがいつでも同時に HashMap を書き込むことができるため、データの不整合が生じる可能性があります。同期が必要な場合は、Collections.synchronizedMap(HashMap マップ) メソッドを使用して HashMap を同期させることができます。
2. Hashtable は HashMap に似ていますが、記録されたキーや値を空にすることができない点が異なります; スレッド同期をサポートしている、つまり、一度に 1 つのスレッドだけが Hashtable に書き込むことができます。ただし、これにより、Hashtable の書き込みが遅くなります。
3. LinkedHashMap はレコードの挿入順序を保存します。Iteraor で LinkedHashMap を走査するときは、最初に取得したレコードを最初に挿入する必要があります。トラバースする場合、HashMap よりも遅くなります。 HashMap のすべての機能を備えています。
4. TreeMap は、保存したレコードをキーに従って並べ替えることができます。デフォルトは昇順です。並べ替えコンパレータを指定することもできます。 Iteraor を使用して TreeMap を走査すると、取得されたレコードは並べ替えられます。 TreeMap のキーと値を空にすることはできません。
4. Vector コレクションから重複要素を削除するにはどうすればよいですか?
Vector.contains() メソッドを使用して、要素が含まれているかどうかを確認します。含まれていない場合は、新しいコレクションに追加します。データが小さい場合に適しています。
Vector を走査して set、SortdSet、HashSet などに入れる簡単な方法もあります。
(ビデオ チュートリアルの推奨: java ビデオ チュートリアル)
5. 要素にアクセスするときの 3 つのインターフェイス List、Map、Set の特徴は何ですか? ?
1. Set
Save 要素では重複した要素は許可されません:
add メソッドにはブール値の戻り値があります。セット内の要素。要素の場合、add メソッドが要素を正常に追加できた場合は true を返します。セットに要素と等しい要素が含まれている場合、add メソッドは現時点では要素を追加できず、結果を返します。は誤りです。
要素の取得:
どの番号を取得するかを指定する方法はありません。Iterator インターフェイスを通じてすべての要素を取得し、各要素を 1 つずつ反復処理することしかできません。
2. リストは順次コレクションを表します
要素の格納:
add(Object) メソッドが複数回呼び出される場合、毎回追加されるオブジェクトは順序でソートされます。先着順の場合は、キューにジャンプすることもできます。つまり、add(int index,Object) メソッドを呼び出して、コレクション内の現在のオブジェクトの格納場所を指定します。
要素の取得:
方法 1: Iterator インターフェイスはすべての要素を取得し、各要素を 1 つずつ繰り返します。
方法 2: get(index i) を呼び出して、取得するインデックスを明確に指定します。このインターフェイスを使用して、各要素の挿入位置を正確に制御します。ユーザーは、Java の配列に似たインデックス (配列の添え字に似たリスト内の要素の位置) を使用して、リスト内の要素にアクセスできます。
3. マップは 2 列のコレクションです
要素の保存:
put メソッド put(obj key, obj value) を使用します。保存するたびに、キー/値の場合、重複したキーは保存できません。重複ルールも等価比較に基づいています。
要素の取得:
get(Object key) メソッドを使用して、キーに基づいて対応する値を取得します。すべてのキーのコレクション、すべての値のコレクション、キーと値で構成される Map.Entry オブジェクトのコレクションを取得することもできます。
List は要素を特定の順序で保持し、重複した要素を持つことができます。Set は重複した要素を持つことができず、内部で並べ替えられます。Map はキーと値の値を保存し、値は複数の値を持つことができます。
以上がJava の古典的な面接質問集 (7)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。