30 top java collections interview questions with answers
このチュートリアルには、最もよくあるJavaコレクションの面接の質問のリストと回答および例が含まれています。 :
JavaのコアAPIは、Javaコレクションフレームワークです。これは、このプログラミング言語の基本的な概念をサポートしています。 Java開発者になりたい場合は、これらのコアコンセプトをよく知っている必要があります。
Javaコレクションの領域は非常に広く、インタビューで多くの質問をすることができます。ここでは、面接で尋ねられる可能性のある多くの関連する質問のリストを収集しました。
=> ここでJavaトレーニングチュートリアルのA〜Zを確認するには、ここをクリックしてください
学習内容:
Javaコレクションのインタビューの質問
Q#1)Javaコレクションフレームワークについて説明してください。
回答: Javaコレクションフレームワークは、オブジェクトのグループの管理と保存に役立つアーキテクチャです。これにより、開発者は事前にパッケージ化されたデータ構造にアクセスし、アルゴリズムを使用してデータを操作することもできます。
Javaコレクションには、検索、削除、挿入、並べ替えなどの操作をサポートするインターフェイスとクラスが含まれています。Javaコレクションには、インターフェイスとクラスに加えて、操作に役立つアルゴリズムも含まれています。
Q#2)Javaコレクションの利点は何ですか?
回答:
Javaコレクションの利点は次のとおりです。
- コレクションクラスを実装する代わりに、コアコレクションクラスを使用するため、開発に必要な労力が軽減されます。
- 十分にテストされたコレクションフレームワーククラスを使用します。したがって、そのコード品質が向上します。
- コードのメンテナンスの労力を軽減します。
- Javaコレクションフレームワークは相互運用可能で再利用可能です。
Q#3)Javaのコレクションの階層について何を知っていますか?
回答:
(画像 ソース )
Q#4)Javaコレクションの基本的なインターフェースについて教えてください。
回答:
以下に、Javaコレクションフレームワークの基本的なインターフェースを示します。
コレクション: これはコレクション階層のベースであり、その要素を表します。ただし、JavaはCollectionの直接アプリケーションを提供していません。また、ほとんどのJavaコレクションはこのインターフェースから取得されます。
セットする: 数学セットの抽象化をモデル化するため、重複する要素を保持することはできません。名前が示すように、それはセットを表します、 例えば、 カードのデッキ。
リスト: 重複する要素を保持でき、順序付けられたコレクションです。そのインデックスを使用して、その中の任意の要素にアクセスできます。リストは、動的な長さの配列、配列のようなものです。
これらは、Javaコレクションのいくつかのインターフェースです。ただし、以下に示すように、さらにいくつかのインターフェースがあります。
- キュー
- デキュー
- イテレータ
- 反復可能
- SortedSet
- ListIterator。
Q#5)シリアル化可能およびクローン化可能なインターフェイスがコレクションによって拡張されないのはなぜですか インターフェース?
回答: コレクションインターフェイスのタスクは、要素と呼ばれるオブジェクトのグループを指定することです。コレクションの実装により、要素を維持する方法が決まります。 例えば、 Listの実装では要素の重複が許可されますが、Setの実装では許可されません。
多くの実装には、パブリッククローン作成の方法があります。ただし、コレクションは抽象的であり、実装が重要であるため、すべてのコレクション実装に含めることは実用的ではありません。
シリアル化とクローン作成の両方の意味と影響は、実質的な実装で作業するときに意味があります。したがって、シリアル化またはクローン化できるかどうか、およびその方法を決定するのは、実際の実装次第です。
詳細= >> Javaのマーカーインターフェイス:シリアライズ可能でクローン可能
そのため、すべての実装でシリアル化とクローン作成を導入することはあまり柔軟ではなく、制限があります。
Q#6)JavaコレクションフレームワークのIteratorは何を理解していますか?
回答: 単純な配列では、ループを使用して各要素にアクセスできます。コレクション内の要素にアクセスするために同様のアプローチが必要な場合は、イテレーターを使用します。 Iteratorは、Collectionオブジェクトの要素にアクセスするために使用される構造です。
Javaでは、イテレータはコレクションフレームワークの「イテレータ」インターフェイスを実装するオブジェクトです。このインターフェースは、java.utilパッケージの一部です。
イテレータの特徴のいくつかは次のとおりです。
- イテレータは、コレクションオブジェクトをトラバースするために使用されます。
- イテレータは、すべてのコレクションに同じイテレータを使用できるため、「ユニバーサルJavaカーソル」と呼ばれます。
- イテレータは、コレクションのトラバースとは別に、「読み取り」および「削除」操作を提供します。
- それらは普遍的であり、すべてのコレクションで機能するため、イテレーターは実装が簡単です。
Javaコレクションの質問を一覧表示する
Q#7)リストインターフェイスの使用法を知っていますか?
(画像 ソース )
回答: リストインターフェイスの目的は、挿入の順序を維持することです。また、重複する値を保存することもできます。
含まれているさまざまなメソッドを使用して、インデックスに応じて要素をスムーズに操作するのに役立ちます。 ArrayList、Vector、Stack、およびLinkedListは、リストインターフェイスを実装するさまざまなクラスです。
Q#8)JavaのArrayListについて何を理解していますか?
回答: リストインターフェイスの実装はArrayListです。リストから要素を動的に追加または削除し、位置アクセスとともに要素の挿入も提供します。 ArrayListは重複する値を許可し、要素の数が初期サイズを超えると、そのサイズは動的に増加する可能性があります。
Q#9)文字列配列をArrayListにどのように変換しますか?
回答: これは、インタビュアーがCollectionutility.classesの把握を確認するために尋ねる初心者レベルのプログラミングの質問です。コレクションと配列は、インタビュアーがよく関心を持つコレクションフレームワークの2つのユーティリティクラスです。
コレクションは、コレクションタイプで特定のタスクを実行するための特定の静的関数を提供します。 Arrayには、配列型に対して実行するユーティリティ関数があります。
//String array String() num_words = {'one', 'two', 'three', 'four', 'five'}; //Use java.util.Arrays class to convert to list List wordList = Arrays.asList(num_words);
文字列型とは別に、他の型の配列を使用してArrayListに変換することもできることに注意してください。
例えば、
//Integer array Integer() numArray = {10,20,30,40}; //Convert to list using Arrays class asList method List num_List = Arrays.asList(numArray);
Q#10)ArrayをArrayListに、ArrayListをArrayに変換します。
回答: ArrayListをArrayに変換するには、toArray()メソッドを使用します- List_object.toArray(new String (List_object.size()))
asList()メソッドはArrayをArrayListに変換するために使用されます- Arrays.asList(item)。 asList()は、Listオブジェクトがパラメーターである静的メソッドです。
Q#11)LinkedListとは何ですか?Javaでサポートされているタイプはいくつですか?
(画像 ソース )
回答: LinkedListは、すべてのリンクが次のリンクに接続されている一連のリンクを持つデータ構造です。
Javaでは、要素を格納するために2種類のLinkedListが使用されます。
- Singly LinkedList: ここで、各ノードは、次のノードへの参照またはポインターとともにノードのデータを格納します。
- 二重リンクリスト: 二重のLinkedListには、次のノードへの参照と前のノードへの参照の2つの参照が付属しています。
Q#12)BlockingQueueで何を理解していますか?
回答: 単純なキューでは、キューがいっぱいになると、それ以上アイテムを挿入できないことがわかります。この場合、キューは単にキューがいっぱいで終了したというメッセージを提供します。キューが空で、キューに削除する要素がない場合にも、同様のケースが発生します。
挿入/削除ができないときに終了するのではなく、アイテムを挿入または削除できるようになるまで待つのはどうですか?
これは、と呼ばれるキューのバリエーションによって答えられます 「ブロッキングキュー」 。ブロッキングキューでは、キューがフルキューをエンキューしようとしたり、空のキューをデキューしようとしたりするたびに、エンキューおよびデキュー操作中にブロッキングがアクティブになります。
次の図に、ブロッキングを示します。
BlockingQueue
したがって、エンキュー操作中、ブロッキングキューは、スペースが使用可能になるまで待機して、アイテムを正常に挿入できるようにします。同様に、デキュー操作では、ブロックキューはアイテムが操作で使用可能になるまで待機します。
アンドロイドのための良いmp3音楽ダウンローダー
ブロッキングキューは、「java.util.concurrent」パッケージに属する「BlockingQueue」インターフェースを実装します。 BlockingQueueインターフェースはnull値を許可しないことを覚えておく必要があります。 nullが検出されると、NullPointerExceptionがスローされます。
Q#13)Javaの優先キューとは何ですか?
回答: Javaの優先キューは、スタックまたはキューのデータ構造に似ています。これはJavaの抽象データ型であり、java.utilパッケージのPriorityQueueクラスとして実装されます。優先度付きキューには、優先度付きキューの各アイテムに優先度があるという特別な機能があります。
優先度キューでは、優先度の高いアイテムが、優先度の低いアイテムの前のサーバーになります。
優先キュー内のすべてのアイテムは、自然な順序に従って順序付けられます。優先度付きキューオブジェクトの作成時にコンパレータを提供することにより、カスタム順序に従って要素を順序付けることもできます。
インターフェイスインタビューの質問を設定する
Q#14)Set Interfaceの用途は何ですか?これを実装するクラスについて教えてください インターフェース。
回答: 集合論では、集合論を使用して、数学的な集合を形成します。これはリストインターフェイスに似ていますが、少し異なります。 Set Interfaceは順序付けられたコレクションではないため、要素を削除または追加するときに順序が保持されません。
主に、重複する要素をサポートしていないため、セットインターフェイスの各要素は一意です。
また、実装が異なる場合でも、Setインスタンスの意味のある比較が可能です。また、equalsとhashCodeの操作のアクションについてより実質的な契約を結びます。 2つの例に同じ要素がある場合、それらは等しくなります。
これらすべての理由により、Set Interfaceには、Listのような要素インデックスベースの操作はありません。コレクションインターフェイスの継承メソッドのみを使用します。 TreeSet、EnumSet、LinkedHashSet、およびHashSetは、SetInterfaceを実装します。
Q#15)HashSetとTreeSetにnull要素を追加したいのですが。できますか?
回答: TreeSetは要素の保存にNavigableMapを使用しているため、null要素を追加することはできません。ただし、HashSetに追加できるのは1つだけです。 SortedMapはnullキーを許可せず、NavigableMapはそのサブセットです。
そのため、TreeSetにnull要素を追加することはできません。追加しようとすると、毎回NullPointerExceptionが発生します。
Q#16)LinkedHashSetについて何を知っていますか?
回答: LinkedHashSetはHashSetのサブクラスであり、SetInterfaceを適用します。 HashSetの順序付けられた形式として、含まれるすべての要素全体で二重にリンクされたリストを管理します。挿入の順序を保持し、親クラスと同様に、一意の要素のみを保持します。
Q#17)HashSetが要素を格納する方法について話してください。
回答: HashMapはキーと値のペアを格納しますが、キーは一意である必要があります。 Mapのこの機能は、すべての要素が一意であることを確認するためにHashSetによって使用されます。
HashSetのMap宣言は、次のように表示されます。
private transient HashMapmap; //This is added as value for each key private static final Object PRESENT = new Object();
HashSetに格納されている要素は、マップのキーとして格納され、オブジェクトは値として表示されます。
Q#18)EmptySet()メソッドについて説明してください。
回答: Emptyset()メソッドは、null要素を削除し、変更できない空のセットを返します。この不変のセットはシリアル化可能です。 Emptyset()のメソッド宣言は- public static final Set emptySet()。
マップインターフェイスのインタビューの質問
Q#19)マップインターフェイスについて教えてください。
回答: Map Interfaceは、より高速なルックアップ用に設計されており、キーと値のペアの形式で要素を格納します。ここではすべてのキーが一意であるため、単一の値にのみ接続またはマップされます。これらのキー値のペアは、マップエントリと呼ばれます。
このインターフェイスには、一意のキーに応じて要素を取得、挿入、および削除するためのメソッドシグネチャがあります。これにより、辞書のようにキーと値の関連付けをマッピングするのに最適なツールになります。
Q#20)マップはコレクションインターフェイスを拡張していません。どうして?
回答: コレクションインターフェイスはオブジェクトの蓄積であり、これらのオブジェクトは指定されたアクセスのメカニズムで構造的に格納されます。 Mapインターフェースは、キーと値のペアの構造に従います。コレクションインターフェイスのaddメソッドは、マップインターフェイスのputメソッドをサポートしていません。
そのため、Mapはコレクションインターフェイスを拡張しませんが、それでもJavaコレクションフレームワークの重要な部分です。
Q#21)HashMapはJavaでどのように機能しますか?
回答: HashMapはMapに基づくコレクションであり、そのアイテムはキーと値のペアで構成されています。 HashMapは通常、またはで示されます。各ハッシュマップ要素には、そのキーを使用してアクセスできます。
HashMapは、「ハッシュ」の原則に基づいて機能します。ハッシュ手法では、長い文字列は、アルゴリズムに他ならない「ハッシュ関数」によって小さな文字列に変換されます。小さい文字列は、検索の高速化と効率的なインデックス作成に役立ちます。
Q#22)IdentityHashMap、WeakHashMap、およびConcurrentHashMapについて説明してください。
回答:
IdentityHashMap HashMapによく似ています。違いは、要素を比較するときに、IdentityHashMapが参照の同等性を使用することです。これは推奨されるマップ実装ではなく、マップインターフェイスを実行しますが、マップの一般的な契約に意図的に準拠していません。
したがって、オブジェクトを比較する場合、これはequalsメソッドの使用を許可します。これは、参照等価セマンティクスが必要なまれなケースで使用するために設計されています。
WeakHashMap 実装は、そのキーへの弱参照のみを格納します。これにより、WeakHashMapの外部にキーの参照がなくなったときに、キーと値のペアのガベージコレクションが可能になります。
これは主に、オブジェクトIDのテストが==演算子を使用したequalsメソッドによって実行されるキーオブジェクトで使用されます。
ConcurrentHashMap ConcurrentMapインターフェイスとSerializableインターフェイスの両方を実装します。マルチスレッド環境ではうまく機能しないため、これはHashMapのアップグレードされた拡張バージョンです。 HashMapと比較すると、パフォーマンス率が高くなっています。
Q#23)HashMapの優れたキーの品質はどれくらいですか?
回答: HashMapがどのように機能するかを理解すると、それらが主にキーオブジェクトのequalsメソッドとhashCodeメソッドに依存していることを簡単に理解できます。したがって、適切なキーは、フェッチされる回数に関係なく、同じhashCodeを何度も提供する必要があります。
同様に、equalsメソッドと比較した場合、同じキーはtrueを返す必要があり、異なるキーはfalseを返す必要があります。そのため、HashMapキーの最適な候補は不変クラスであると言われています。
Q#24)TreeMapはいつ使用できますか?
(画像 ソース )
回答: TreeMapは、HashMapの特殊な形式として、HashMapにないものとして、デフォルトで「自然な順序」でキーの順序を維持します。いくつかのキーでオブジェクトを並べ替えるために使用できます。
例えば、 辞書をアルファベット順に実装して印刷する場合は、TreeMapをTreeSetと一緒に使用できます。自動的にソートされます。もちろん、手動で行うこともできますが、TreeMapを使用すると作業がより効率的に行われます。ランダムアクセスが不可欠な場合にも使用できます。
質問の違い
Q#25)コレクションとコレクションの違いは何ですか?
回答:
コレクション | コレクション |
---|---|
ListIteratorを使用してセットをトラバースすることはできません。 | ListIteratorは、リストを任意の方向にトラバースできます。 |
インターフェースです。 | クラスです。 |
コレクションは、オブジェクトのグループを単一のエンティティとして表します。 | コレクションは、コレクションオブジェクトのさまざまなユーティリティメソッドを定義します。 |
これは、コレクションフレームワークのルートインターフェイスです。 | コレクションはユーティリティクラスです。 |
コレクションフレームワークのデータ構造を導き出します。 | コレクションには、データ構造の操作を支援するためのさまざまな静的メソッドが含まれています。 |
Q#26)ArrayはArrayListとどう違うのですか?
回答:
ArrayとArrayListの違いを以下に示します。
アレイ | 配列リスト |
---|---|
配列は強く型付けされたクラスです。 | ArrayListは、緩く型付けされたクラスです。 |
配列のサイズを動的に変更することはできません。その寸法は静的です。 | ArrayListは動的にサイズ変更できます。 |
配列には、要素のボックス化とボックス化解除は必要ありません。 | ArrayListには、要素のボックス化とボックス化解除が必要です。 |
Q#27)ArrayListとLinkedListを区別します。
回答:
配列リスト | LinkedList |
---|---|
ArrayListは、要素を格納するために内部的に動的配列を使用します。 | LinkedListは、二重リンクリストを実装します。 |
要素のArrayList操作はかなり遅いです。 | LinkedListは、その要素をはるかに高速に操作します。 |
ArrayListは、リストとしてのみ機能します。 | LinkedListは、リストとキューの両方として機能できます。 |
データの保存とアクセスに役立ちます。 | データの操作に便利です。 |
Q#28)IterableはIteratorとどう違うのですか?
回答:
反復可能 | イテレータ |
---|---|
Java.langパッケージインターフェースです。 | Java.utilパッケージインターフェースです。 |
イテレータと呼ばれる1つの抽象メソッドのみを生成します。 | hasNextとnextの2つの抽象メソッドが付属しています。 |
トラバースできる一連の要素を表します。 | 反復状態のオブジェクトを表します。 |
Q#29)セットとリストの違いを述べてください。
回答:
セットする | リスト |
---|---|
SetはSetインターフェースを実装します。 | リストはリストインターフェースを実装します。 |
セットは、順序付けられていない要素のセットです。 | リストは、順序付けられた要素のセットです。 |
セットは、挿入中に要素の順序を維持しません。 | リストは、挿入中に要素の順序を保持します。 |
セットでは、値の重複は許可されていません。 | リストは重複する値を許可します。 |
セットにはレガシークラスは含まれていません。 | リストには、レガシークラスであるVectorが含まれています。 |
このセットでは、null値を1つだけ許可します。 | リスト内のnull値の数に制限はありません。 |
Q#30)キューとスタックの違いは何ですか?
回答:
キュー | スタック |
---|---|
キューは、先入れ先出し(FIFO)アプローチの原則に基づいて機能します。 | スタックは後入れ先出し(LIFO)ベースで機能します。 |
キューへの挿入と削除は、異なる端で行われます。 | 挿入と削除は、スタックの最上位と呼ばれる同じ端から実行されます。 |
エンキューは挿入の名前であり、デキューは要素の削除です。 | プッシュは挿入であり、ポップはスタック内の要素の削除です。 |
リストの最初の要素(前)と最後の要素(後)への2つのポインターがあります。 | 一番上の要素を指すポインタは1つだけです。 |
Q#31)SinglyLinkedListとDoublyLinkedListはどのように異なりますか?
回答:
単一リンクリスト | 二重リンクリスト |
---|---|
単一リンクリストの各ノードは、データと次のノードへのポインタで構成されます。 | 二重リンクリストは、データ、次のノードへのポインタ、および前のノードへのポインタで構成されます。 |
単一リンクリストは、次のポインタを使用してトラバースできます。 | 二重にリンクされたリストは、前のポインターと次のポインターの両方を使用してトラバースできます。 |
単一リンクリストは、二重リンクリストに比べてスペースを取りません。 | 二重にリンクされたリストは、多くのメモリスペースを占有します。 |
要素へのアクセスはあまり効率的ではありません。 | 要素へのアクセスは効率的です。 |
Q#32)HashMapはHashTableとどう違うのですか?
回答:
HashMap | ハッシュ表 |
---|---|
HashMapはAbstractMapクラスを継承します | HashTableはDictionaryクラスを継承します。 |
HashMapは同期されていません。 | HashTableは同期されます。 |
HashMapは複数のnull値を許可しますが、nullキーは1つだけです。 | HashTableはnull値またはキーを許可しません。 |
HashMapはより高速です。 | HashTableはHashMapよりも低速です。 |
HashMapはIteratorでトラバースできます。 | HashTableをトラバースできません イテレータまたは列挙子を使用します。 |
Q#33)ArrayListとVectorの違いをリストアップしてください。
回答:
配列リスト | ベクター |
---|---|
ArrayListは同期されていません。 | ベクトルが同期されます。 |
ArrayListはレガシークラスではありません。 | Vectorはレガシークラスです。 |
ElementListは、要素がそのサイズを超えて挿入されると、ArrayListの半分のサイズになります。 | 要素がそのサイズを超えて挿入されると、Vectorはそのサイズを2倍に増やします。 |
ArrayListはスレッドセーフではありません | ベクターはスレッドセーフです。 |
Q#34)FailFastはFailsafeとどう違うのですか?
回答:
FailFast | フェイルセーフ |
---|---|
反復中、コレクションの変更は許可されません。 | 反復中に変更を許可します。 |
トラバースに元のコレクションを使用します。 | 元のコレクションのコピーを使用します。 |
追加のメモリは必要ありません。 | 追加のメモリが必要です。 |
ConcurrentModificationExceptionをスローします。 | 例外はスローされません。 |
結論
これらのJavaコレクションの面接の質問は、面接の準備に役立ちます。 Javaコレクションの面接の準備は深く広範囲にわたる必要があるため、これらの質問を研究し、概念をよく理解してください。
これらの質問はあなたの知識だけでなくあなたの精神の存在もテストします。
=> ここで簡単なJavaトレーニングシリーズに気をつけてください