Java 高頻度の基本的な面接の質問 - コレクション フレームワーク パート

王林
リリース: 2020-08-28 15:49:29
転載
1804 人が閲覧しました

Java 高頻度の基本的な面接の質問 - コレクション フレームワーク パート

#1. ArrayList と Vector の違い

(その他の面接の質問に関する推奨事項:

Java 面接の質問と回答)

どちらのクラスも List インターフェイスを実装します (List インターフェイスは Collection インターフェイスを継承します)。どちらも順序付けされたコレクションです。つまり、これら 2 つのコレクションに格納されている要素の位置は順序通りであり、動的配列と同等です。将来的に位置インデックス番号に従って要素を取得でき、その中のデータは繰り返し可能です。これが HashSet などのコレクションとの最大の違いです。HashSet などのコレクションはインデックス番号によって要素を取得できません。重複した要素は許可されます。

ArrayList と Vector の違いには主に 2 つの側面があります:

(1) 同期性:

Vector はスレッドセーフです。つまり、メソッド間ではスレッドセーフです。スレッドは同期されますが、ArrayList はスレッド セーフではなく、そのメソッドはスレッド非同期です。 1 つのスレッドのみがコレクションにアクセスする場合は、ArrayList を使用するのが最適です。これは、スレッドの安全性が考慮されておらず、より効率的であるためです。複数のスレッドがコレクションにアクセスする場合は、Vector を使用するのが最適です。自分たちでやる スレッドセーフなコードをもう一度考えて作成します。

(2) データの増加:

ArrayList と Vector には初期容量があり、格納される要素の数がその容量を超えると、ArrayList と Vector を増やす必要があります。ストレージ スペースを増やしたい場合は、1 つのストレージ ユニットを追加するだけでなく、複数のストレージ ユニットを追加します。毎回追加するストレージ ユニットの数は、メモリ スペースの使用率とプログラム効率の間で一定のバランスを達成する必要があります。

Vector はデフォルトで元のサイズの 2 倍に成長しますが、ArrayList の成長戦略はドキュメント内で明確に指定されていません (ソース コードから、元のサイズの 1.5 倍に成長することがわかります)。 ArrayList と Vector はどちらも初期空間サイズを設定でき、Vector は拡張空間サイズも設定できますが、ArrayList には拡張空間を設定するメソッドがありません。

概要: Vector は元のサイズの 2 倍に増加し、ArrayList は元のサイズの 0.5 倍に増加します。

2. HashMap と Hashtable の違い

HashMap は、Hashtable の軽量実装 (非スレッドセーフ実装) です。どちらも Map インターフェイスを完成させます。主な違いは、HashMap が次のことを可能にすることです。 empty (null) ) Key 値 (key)、非スレッド安全性のため、1 つのスレッドのみがアクセスする場合、効率は Hashtable よりも高くなります。

HashMap ではエントリのキーまたは値として null を使用できますが、Hashtable では許可されません。

HashMap は、Hashtable の contains メソッドを削除し、containsvalue と containsKey に変更しました。 contains メソッドは誤解を招きやすいためです。

Hashtable は Dictionary クラスから継承し、HashMap は Java 1.2 で導入された Map インターフェイスの実装です。

最大の違いは、Hashtable のメソッドは同期されているが、HashMap は同期されていないことです。複数のスレッドが Hashtable にアクセスする場合、そのメソッドを自分で同期する必要はありませんが、HashMap は同期を提供する必要があります。

HashMap と HashTable については、主に 3 つの側面があります。

(1) 歴史的な理由: Hashtable は古い Dictionary クラスに基づいており、HashMap は Java 1.2 で導入された Map インターフェイスの実装です

(2) Synchronicity: Hashtable はスレッドセーフですつまり、これは同期であり、HashMap は安全でないオンライン プログラムであり、同期ではありません

(3) 値: HashMap のみ、テーブル エントリのキーまたは値として null 値を使用できます。

(学習ビデオの推奨:

java コース)

3. リストとマップの違い?

1 つは単一列データを格納するコレクションです、もう 1 つはキーのコレクションであり、値などの 2 列データのコレクションの場合、List に格納されるデータは順序があり、繰り返しが許可されますが、Map に格納されるデータは順序がありません。キーは繰り返すことができませんが、その値は繰り返すことができます。

4. List、Set、および Map は Collection インターフェイスから継承されますか?

List、Set は継承されますが、Map は継承されません。

5. List、Map、および集合インターフェースが存在しますが、それを取り出す際の各要素の特徴は何でしょうか?

(この種の質問は、試験のレベルを 2 つの側面から比較します。1 つは内容を本当に理解しているか、もう 1 つは優れた要約とプレゼンテーションのスキルです。)

まず、リストSet と同様に、これらは両方とも単一列要素のコレクションであるため、Collection と呼ばれる共通の親インターフェイスがあります。 Set では重複要素は許可されません。つまり、2 つの等しい (同じというだけではないことに注意してください) オブジェクトは存在できません。つまり、Set コレクションに A オブジェクトがあり、次に B オブジェクトを保存したいとします。 Set コレクションですが、B オブジェクトが A オブジェクトと等しい場合、B オブジェクトは保存されません。

したがって、Set コレクションの add メソッドにはブール値の戻り値があります。セット内に要素がなく、add メソッドが要素を正常に追加できる場合は、true を返します。セットにelement が要素と等しい場合、add メソッドは現時点では要素を追加できず、戻り結果は false になります。 Set が要素を取得する場合、取得する番号を指定することはできません。Iterator インターフェイスを通じてすべての要素を取得し、各要素を 1 つずつ反復処理することしかできません。

リストはコレクションを順番に表します。年齢、サイズ、価格などで並べ替えられていないことに注意してください。 add(Obje) メソッドを複数回呼び出すと、毎回追加されるオブジェクトは、駅で切符を買うときの順番と同じように、先着順に並べ替えられます。場合によっては、キューにジャンプすることもできます。つまり、add(intindex,Obj e) メソッドを呼び出して、コレクション内の現在のオブジェクトの格納場所を指定します。

オブジェクトは List に繰り返し格納できます。add メソッドが呼び出されるたびに、オブジェクトはコレクションに 1 回挿入されます。実際には、オブジェクト自体はコレクションに格納されるのではなく、コレクションに格納されます。インデックス変数は、このオブジェクトを指すために使用されます。このオブジェクトが複数回追加されると、図 x に示すように、このオブジェクトを指すコレクション内の複数のインデックスと同等になります。 Iterator インターフェイスを使用して List のすべての要素を取得し、各要素を 1 つずつ反復処理することに加えて、get(index i) を呼び出して取得する数値を明確に指定することもできます。

Map は List や Set とは異なります。これは 2 列のコレクションであり、put メソッドがあり、次のように定義されます: put(obj key, obj value)。保存されるたびに、キー/値のペアを保存する必要があります。重複したキーは保存できません。重複ルールも等価比較に基づいています。キーに応じて対応する値を取得できます。つまり、get(Object key) の戻り値はキーに対応する値になります。

さらに、すべてのキーの組み合わせ、すべての値の組み合わせ、キーと値で構成される Map.Entry オブジェクトのコレクションを取得することもできます。

リストは要素を特定の順序で保持しており、要素が重複している可能性があります。セットには重複した要素を含めることはできず、内部的にソートされます。 Map はキーと値の値を保存し、値には複数の値を含めることができます。

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

ArrayList と Vector はどちらも配列を使用してデータを保存します。この配列の要素数は、追加と挿入を容易にするために実際に格納されたデータ。要素、それらはすべてシリアル番号によって要素に直接インデックスを付けることができますが、要素の挿入には配列要素の移動などのメモリ操作が含まれるため、データのインデックス付けは高速ですが、データの挿入は遅くなります。通常、ベクトルのパフォーマンスは劣ります。同期メソッド (スレッド セーフ) を使用しているため、ArrayList よりも優れています。 LinkedList は二重リンク リストを使用して格納します。シリアル番号によるデータのインデックス作成には、前方または後方へのトラバースが必要となり、インデックスが遅くなります。ただし、データを挿入するときは、このアイテムの前後のアイテムを記録するだけでよいため、挿入速度は速くなります。もっと早く。

LinkedList はスレッドアンセーフでもあります。LinkedList には、LinkedList をスタックおよびキューとして使用できるようにするためのメソッドがいくつか用意されています。

7. Vector セットから重複要素を削除する

Vector newVector = new Vector();
For (int i=0;i<vector.size();i++)
{
Object obj = vector.get(i);
       if(!newVector.contains(obj);
             newVector.add(obj);
}
ログイン後にコピー

重複要素を許可しない Set を使用する簡単な方法もあります:

HashSetset = new HashSet(vector );

8. コレクションとコレクションの違い。

Collection は、コレクション クラスの上位インターフェイスです。これを継承するインターフェイスには、主に Set と List があります。

Collections は、コレクション クラスのヘルパー クラスです。一連の静的メソッドを提供します。さまざまなコレクションの検索、並べ替え、スレッド セーフ、その他の操作を実装します。

9. Set 内の要素は繰り返すことができませんが、繰り返しかどうかを区別するためにどのような方法が使用されますか? == を使用するべきですか? それとも、equals() を使用するべきですか? それらの違いは何ですか?

In Set 要素を繰り返すことはできません。要素が繰り返されるかどうかは、equals() メソッドを使用して決定されます。

== と等しいの違いも試験で落ちた問題です。ここで話しましょう:

== 演算子は、値が以下であるかどうかを比較するために特別に使用されます。 2 つの変数が等しい、つまり、変数を比較するために使用されます。対応するメモリに格納されている値が同じかどうか、2 つの基本タイプのデータまたは 2 つの参照変数が等しいかどうかを比較するには、次の操作のみが可能です。 == 演算子を使用します。

equals メソッドは、2 人の人の外見が同じかどうかを比較するのと同じように、2 つの独立したオブジェクトの内容が同じかどうかを比較するために使用されます。比較する 2 つのオブジェクトは独立しています。

例: 2 つの新しいステートメントは 2 つのオブジェクトを作成し、次に 2 つの変数 a/b を使用してそれぞれオブジェクトの 1 つを指します。これらは 2 つの異なるオブジェクトであり、最初のアドレスは異なります。つまり、a と b に格納されている値が異なるため、式 a==b は false を返し、2 つのオブジェクトの内容は同じであるため、式 a.equals(b) は true を返します。

(推奨される関連チュートリアル: java 入門チュートリアル )

10. どのようなコレクション クラスを知っていますか?主な方法?

最も一般的に使用されるコレクション クラスは、List と Map です。 List の具体的な実装には、ArrayList と Vector が含まれます。これらは可変サイズのリストであり、あらゆるタイプのオブジェクトの要素リストの構築、保存、操作に適しています。 List は、数値インデックスによって要素にアクセスするのに適しています。

Map は、より一般的な要素の保存方法を提供します。 Map コレクション クラスは、各キーが値にマップされる要素のペア (「キー」と「値」と呼ばれる) を格納するために使用されます。

これらにはすべて、追加、削除、変更、確認するメソッドがあります。

set の場合、一般的なメソッドは add、remove、contains などです。

map の場合、一般的なメソッドは put、remove、contains などです。

List クラスには、要素を順番に取得できるため、get(int Index) のようなメソッドがありますが、set クラスには get(int Index) のようなメソッドはありません。 List クラスと set クラスはどちらもすべての要素を反復処理できます。反復処理を行う場合は、最初に iterator オブジェクトを取得する必要があります。そのため、set クラスと list クラスの両方には、iterator オブジェクトを返すための iterator メソッドがあります。 Map は 3 つのコレクションを返すことができます。1 つはすべてのキーのコレクションを返し、もう 1 つはすべての値のコレクションを返し、3 つ目はキーと値で構成される EntrySet オブジェクトのコレクションを返します。Map には get メソッドもあり、パラメータは key です戻り値はキーに対応する値です。これは無料でプレイでき、メソッドをテストする機能ではありません。プログラミングプロセス中にプロンプ​​トが表示されます。3 つの違いに基づいて使用方法について説明します。 。

以上がJava 高頻度の基本的な面接の質問 - コレクション フレームワーク パートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!