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

(*-*)浩
リリース: 2019-12-02 16:27:16
オリジナル
2819 人が閲覧しました

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

ArrayList と Vector の違い

どちらのクラスも List インターフェイスを実装し (List インターフェイスは Collection インターフェイスを継承します)、どちらも Ordered です。セット、つまり、2 つのセットに格納されている要素の位置が順番に並んでおり、動的配列と同等です。後から位置インデックス番号に従って要素を取り出すことができ、その中のデータは自由に取り出すことができます。繰り返しました。 (推奨される学習: Java 面接の質問 )

これが 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 倍に増加します。

HashMap と Hashtable の違い

HashMap は Hashtable の軽量実装 (非スレッドセーフ実装) であり、どちらも Map インターフェイスを完成させます。主な違いは、HashMap は空 (null) のキー値 (キー) を許可することですが、非スレッド安全性のため、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. 同期性: Hashtable はスレッドです。安全、つまり同期的ですが、HashMap は安全でないオンライン プログラムであり、同期的ではありません

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

List と Map の違いは何ですか?

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

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

List、Set は継承されますが、Map は List ではありません

#List 、Map、Set 要素にアクセスするときの 3 つのインターフェイスのそれぞれの特徴は何ですか?

(このタイプの質問は、2 つの側面でテストのレベルを比較します。1 つは内容を完全に理解すること、もう 1 つは強力な要約とプレゼンテーションのスキルを備えていることです。)

まず第一に、List と Set は似ており、どちらも単一列要素のコレクションであるため、Collection と呼ばれる共通の親インターフェイスを持っています。

Set では重複した要素は許可されません。つまり、2 つの等しい (同じだけではないことに注意してください) オブジェクトは存在できません。つまり、Set コレクションに A オブジェクトがあると仮定すると、次のようになります。 Set コレクションに別のオブジェクトを追加します。B オブジェクトを格納しますが、B オブジェクトが A オブジェクトと等しい場合、B オブジェクトは格納できません。

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

リストはコレクションを順番に表します。年齢、サイズ、価格などで並べ替えられていないことに注意してください。 add(Obje) メソッドを複数回呼び出すと、毎回追加されるオブジェクトは、駅で切符を買うときの順番と同じように、先着順に並べ替えられます。

場合によっては、キューにジャンプすることもできます。つまり、add(intindex,Obj e) メソッドを呼び出して、コレクション内の現在のオブジェクトの格納場所を指定します。

オブジェクトは List に繰り返し格納できます。add メソッドが呼び出されるたびに、オブジェクトはコレクションに 1 回挿入されます。実際には、オブジェクト自体はコレクションに格納されるのではなく、コレクションに格納されます。インデックス変数は、このオブジェクトを指すために使用されます。このオブジェクトが複数回追加されると、このオブジェクトを指すコレクション内の複数のインデックスと同等になります。

Iterator インターフェイスを使用して List のすべての要素を取得し、各要素を 1 つずつ反復処理することに加えて、get(index i) を呼び出して取得する数値を明確に指定することもできます。

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

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

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

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

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

LinkedList はストレージに二重リンク リストを使用します。シリアル番号によるデータのインデックス作成には前方または後方のトラバースが必要となり、インデックスが遅くなります。ただし、データを挿入するときは、この前後のアイテムを記録するだけで済みます。項目なので、「Faster」を挿入します。

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

#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);
ログイン後にコピー

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

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

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

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

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 を返します。

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

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

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

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

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

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

リストクラスには get( int Index) が含まれます。これは、要素を順番に取得できるためです。また、set クラスには get(int Index) のようなメソッドがありません。 List クラスと set クラスはどちらもすべての要素を反復処理できます。反復処理を行う場合は、最初に iterator オブジェクトを取得する必要があります。そのため、set クラスと list クラスの両方には、iterator オブジェクトを返すための iterator メソッドがあります。

map は 3 つのコレクションを返すことができ、1 つはすべてのキーのコレクションを返し、もう 1 つはすべての値のコレクションを返し、もう 1 つはキーと値で構成される EntrySet オブジェクトのコレクションを返します。Map には get メソッドとパラメータもあります。これはキーであり、戻り値はキーに対応する値です。これは自由にプレイでき、メソッドをテストする機能ではありません。プログラミング プロセス中にプロンプ​​トが表示されます。使い方については、 3つの違い。

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

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