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

Java では、面接官から最もよく聞かれるのはコレクション面接の質問です。ここでは、コレクションのインタビューで最もよく聞かれる質問とその回答のリストを示します。


1) Java のコレクション フレームワークとは何ですか?

コレクション フレームワークはクラスとインターフェイスの組み合わせであり、データをオブジェクトの形式で保存および操作するために使用されます。この目的のために、ArrayList、Vector、Stack、HashSet などのさまざまなクラスと、List、Queue、Set などのインターフェイスが提供されます。


2) 配列とコレクションの主な違いは何ですか?

配列とコレクションは、オブジェクトの参照の保存とデータの操作に関しては似ていますが、多くの点で異なります。配列とコレクションの主な違いは次のとおりです。

  • 配列は常に固定サイズです。つまり、ユーザーは要件に応じて、または実行時に配列の長さを増減することはできませんが、コレクションでは、必要に応じてサイズを動的に変更できます。
  • 配列には同種または類似のタイプのオブジェクトのみを格納できますが、コレクションには異種のオブジェクトを格納できます。
  • 配列は「既成の」ものを提供できません。ソートや検索などのユーザー要件に応じたメソッドが含まれていますが、Collection には使用できる既製のメソッドが含まれています。

3) Collection フレームワークで使用されるさまざまなインターフェイスについて説明しますか?

Collection Framework はさまざまなインターフェースを実装しています。Collection インターフェースと Map インターフェース (java.util.Map) は、Java Collection Framework の主に使用されるインターフェースです。 Collection Framework のインターフェースのリストは以下のとおりです。

1. 収集インターフェイス: コレクション (java.util.Collection) は主要なインターフェイスであり、すべてのコレクションはこのインターフェイスを実装する必要があります。

構文:

 public interface Collectionextends Iterable  

ここで、 は、このインターフェイスがジェネリック タイプであることを表します

2. リストインターフェイス: List インターフェイスは Collection インターフェイスを拡張したもので、順序付けられたオブジェクトのコレクションです。重複した要素が含まれています。また、要素へのランダム アクセスも可能になります。

構文:

 public interface List extends Collection  

3. インターフェースを設定します。 Set (java.util.Set) インターフェイスは、重複した要素を含めることができないコレクションです。 Collection インターフェイスの継承されたメソッドのみを含めることができます

構文:

 public interface Set extends Collection  

キューインターフェイス: キュー (java.util.Queue) インターフェイスは、要素を FIFO (先入れ先出し) 形式で格納するキュー データ構造を定義します。

構文:

 public interface Queue extends Collection  

4. デキューインターフェイス: それは両端のキューです。両端から要素を挿入および削除できます。スタックとキューの両方のプロパティを埋め込むので、LIFO (後入れ先出し) スタックと FIFO (先入れ先出し) キューの操作を実行できます。

構文:

 public interface Dequeue extends Queue  

5. マップインターフェイス: Map (java.util.Map) は、要素のキーと値のペアのストレージを表します。 Map インターフェイスは Collection インターフェイスを実装しません。含めることができるのは一意のキーのみですが、重複した要素を含めることはできます。 JavaでMapを実装するインターフェースには、MapインターフェースとSorted Mapの2つがあります。


4) ArrayList と Vector の違いは何ですか?

いいえ。 配列リスト ベクター
1) ArrayList は同期されていません。 ベクトルは同期されています。
2) ArrayList はレガシー クラスではありません。 Vector はレガシー クラスです。
3) ArrayList のサイズは配列サイズの 50% 増加します。 Vector は配列サイズを 2 倍にすることでサイズを増やします。
4) ArrayList は「スレッドセーフ」ではありません。同期されていないので。 ベクター リストは「スレッドセーフ」ですか?すべてのメソッドが同期されるためです。

5) ArrayList と LinkedList の違いは何ですか?

いいえ。 配列リスト リンクリスト
1) ArrayList は動的配列を使用します。 LinkedList は二重リンク リストを使用します。
2) ArrayList は必要な量が多すぎるため、操作には効率的ではありません。 LinkedList は操作に効率的です。
3) データの保存と取得には ArrayList の方が適しています。 LinkedList はデータを操作するのに適しています。
4) ArrayList はランダム アクセスを提供します。 LinkedList はランダム アクセスを提供しません。
5) ArrayList はオブジェクトのみを格納するため、メモリのオーバーヘッドが少なくなります LinkedList はオブジェクトとそのオブジェクトのアドレスを格納するため、より多くのメモリ オーバーヘッドがかかります。

6) Iterator と ListIterator の違いは何ですか?

Iterator は要素を順方向にのみ走査しますが、ListIterator は要素を順方向と逆方向に走査します。

いいえ。 イテレーター リスト反復子
1) Iterator は要素を順方向にのみ走査します。 ListIterator は要素を逆方向と順方向の両方に走査します。
2) Iterator は List、Set、Queue で使用できます。 ListIterator は List でのみ使用できます。
3) Iterator は、コレクションの走査中に削除操作のみを実行できます。 ListIterator は ?add,? を実行できます。 ?取り除く、?そして「セット」コレクションを走査する際の操作。

7) イテレータと列挙の違いは何ですか?

いいえ。 イテレータ 列挙
1) Iterator はレガシー要素と非レガシー要素をトラバースできます。 列挙はレガシー要素のみをトラバースできます。
2) イテレータはフェイルファストです。 列挙はフェイルファストではありません。
3) Iterator は Enumeration よりも遅いです。 列挙はイテレータよりも高速です。
4) Iterator は、コレクションを走査しながら削除操作を実行できます。 列挙型は、コレクションに対してトラバース操作のみを実行できます。

8) リストとセットの違いは何ですか?

List と Set はどちらもコレクション インターフェイスを拡張します。ただし、両者には以下に示すいくつかの違いがあります。

  • List には重複した要素を含めることができますが、Set には一意の項目が含まれます。
  • List は挿入順序を保持する順序付きコレクションですが、Set は挿入順序を保持しない順序なしコレクションです。
  • List インターフェイスには Vector クラスである単一のレガシー クラスが含まれていますが、Set インターフェイスにはレガシー クラスがありません。
  • List インターフェイスでは n 個の null 値を許可できますが、Set インターフェイスでは 1 つの null 値のみが許可されます。

9) HashSet と TreeSet の違いは何ですか?

HashSet と TreeSet (両方のクラス) は Set インターフェイスを実装します。両者の違いを以下に示します。

  • HashSet は順序を維持しませんが、TreeSet は昇順を維持します。
  • HashSet はハッシュ テーブルによって実現されますが、TreeSet はツリー構造によって実装されます。
  • HashSet は TreeSet よりも高速に実行されます。
  • HashSet は HashMap によってサポートされるのに対し、TreeSet は TreeMap によってサポートされます。

10) セットとマップの違いは何ですか?

Set と Map の違いは以下のとおりです。

  • Set には値のみが含まれますが、Map にはキーと値の両方が含まれます。
  • Set には一意の値が含まれますが、Map には重複した値を持つ一意のキーを含めることができます。
  • Set は単一の null 値を保持しますが、Map には n 個の null 値を持つ単一の null キーを含めることができます。

11) HashSet と HashMap の違いは何ですか?

HashSet と HashMap の違いを以下に示します。

  • HashSet には値のみが含まれますが、HashMap にはエントリ (キー、値) が含まれます。 HashSet は反復できますが、反復するには HashMap を Set に変換する必要があります。
  • HashSet は Set インターフェイスを実装するのに対し、HashMap は Map インターフェイスを実装します
  • HashSet には重複する値を含めることはできませんが、HashMap には一意のキーを持つ重複した値を含めることができます。
  • HashSet には単一の null 値のみが含まれますが、HashMap は n 個の null 値を持つ単一の null キーを保持できます。

12) ハッシュマップとツリーマップの違いは何ですか?

HashMap と TreeMap の違いを以下に示します。

  • HashMap は順序を維持しませんが、TreeMap は昇順を維持します。
  • HashMap はハッシュ テーブルによって実装されますが、TreeMap はツリー構造によって実装されます。
  • HashMap はキーまたは値で並べ替えることができますが、TreeMap はキーで並べ替えることができます。
  • HashMap には複数の null 値を持つ null キーを含めることができますが、TreeMap は null キーを保持できませんが、複数の null 値を持つことができます。

13) HashMap と Hashtable の違いは何ですか?

いいえ。 ハッシュマップ ハッシュ表
1) HashMap は同期されていません。 ハッシュテーブルは同期されています。
2) HashMap には、1 つの null キーと複数の null 値を含めることができます。 ハッシュテーブルには null キーまたは null 値を含めることはできません。
3) HashMap は「スレッドセーフ」ではありません。したがって、非スレッドアプリケーションに役立ちます。 ハッシュテーブルはスレッドセーフであり、さまざまなスレッド間で共有できます。
4) 4) HashMap は AbstractMap クラスを継承します Hashtable は Dictionary クラスを継承します。

14) コレクションとコレクションの違いは何ですか?

コレクションとコレクションの違いは以下のとおりです。

  • Collection はインターフェイスですが、Collections はクラスです。
  • Collection インターフェイスは、List、Set、Queue にデータ構造の標準機能を提供します。ただし、Collections クラスはコレクション要素を並べ替えて同期するためのものです。
  • Collection インターフェイスはデータ構造に使用できるメソッドを提供し、Collections クラスはコレクションに対するさまざまな操作に使用できる静的メソッドを提供します。

15) 比較可能と比較器の違いは何ですか?

いいえ。 匹敵します コンパレータ
1) Comparable が提供するシーケンスは 1 種類のみです。 Comparator は複数の種類のシーケンスを提供します。
2) これには、compareTo() という名前の 1 つのメソッドが用意されています。 これは、compare() という名前の 1 つのメソッドを提供します。
3) これは java.lang パッケージにあります。 これは java.util パッケージにあります。
4) Comparable インターフェースを実装すると、実際のクラスが変更されます。 実際のクラスは変更されません。

16) BlockingQueue で何がわかりますか?

BlockingQueue は、Queue インターフェイスを拡張したインターフェイスです。取得、挿入、削除などの操作の同時実行性を提供します。要素の取得中は、キューが空でなくなるまで待機します。要素を保存している間、使用可能なスペースが空くまで待機します。 BlockingQueue には null 要素を含めることはできません。BlockingQueue の実装はスレッドセーフです。

構文:

 public interface BlockingQueue extends Queue  

17) プロパティ ファイルの利点は何ですか?

プロパティー・ファイルの値を変更した場合、Java クラスを再コンパイルする必要はありません。したがって、アプリケーションの管理が容易になります。頻繁に変更される情報を保存するために使用されます。次の例を考えてみましょう。

 import java.util.*; import java.io.*; public class Test { public static void main(String[] args)throws Exception{ FileReader reader=new FileReader('db.properties'); Properties p=new Properties(); p.load(reader); System.out.println(p.getProperty('user')); System.out.println(p.getProperty('password')); } }  

出力

 system oracle  

18) hashCode() メソッドは何をしますか?

hashCode() メソッドは、ハッシュ コード値 (整数) を返します。

hashCode() メソッドは、(equals() メソッドを呼び出して) 2 つのキーが同一である場合、同じ整数を返します。

ただし、2 つのハッシュ コード番号が異なるキーまたは同じキーを持つ可能性があります。

equals() メソッドを使用しても 2 つのオブジェクトが等しい結果を生成しない場合、 hashcode() メソッドは両方のオブジェクトに異なる整数の結果を提供します。


19) なぜ、equals() メソッドをオーバーライドするのでしょうか?

2 つのオブジェクトが同じかどうかを確認するには、equals メソッドを使用します。プロパティに基づいてオブジェクトをチェックする場合は、オーバーライドする必要があります。

たとえば、Employee は、id、name、salary の 3 つのデータ メンバーを持つクラスです。ただし、従業員オブジェクトの平等性を給与で確認したいと考えます。次に、equals() メソッドをオーバーライドする必要があります。


20) List、Set、Map 要素を同期するにはどうすればよいですか?

はい、Collections クラスには、List、Set、または Map 要素を同期させるためのメソッドが用意されています。

public static List synchronizedList(List l){}
public static Set synchronizedSet(Set s){}
public static SortedSet synchronizedSortedSet(SortedSet s){}
public static Map synchronizedMap(Map m){}
public static SortedMap synchronizedSortedMap(SortedMap m){}

21) ジェネリックコレクションの利点は何ですか?

ジェネリック コレクションを使用することには、主に 3 つの利点があります。

  • ジェネリック クラスを使用する場合、型キャストは必要ありません。
  • これはタイプセーフであり、コンパイル時にチェックされます。
  • ジェネリックは、コンパイル時にバグを検出できるようにすることで、コードの安定性を確認します。

22) Hashtable におけるハッシュ衝突とは何ですか?また Java ではどのように処理されますか?

同じハッシュ値を持つ 2 つの異なるキーは、ハッシュ衝突として知られています。衝突を避けるために、2 つの別々のエントリが 1 つのハッシュ バケットに保持されます。ハッシュの衝突を回避するには 2 つの方法があります。

  • 個別のチェーン
  • オープンアドレッシング

23) Dictionaryクラスとは何ですか?

Dictionary クラスは、キーと値のペアを保存する機能を提供します。


24) ハッシュベースのコレクションにおける負荷係数のデフォルトのサイズはどれくらいですか?

負荷率のデフォルトのサイズは次のとおりです。 0.75 。デフォルトの容量は、初期容量 * 負荷率として計算されます。たとえば、16 * 0.75 = 12 となります。つまり、12 が Map のデフォルトの容量になります。


25) フェイルファストで何がわかりますか?

構造変更が発生した場合に直ちに ConcurrentmodificationException をスローする Java のイテレータは、フェイルファスト イテレータと呼ばれます。 Fail-fats イテレータはメモリ内に追加のスペースを必要としません。


26) Array と ArrayList の違いは何ですか?

Array と ArrayList の主な違いを以下に示します。

SN 配列 配列リスト
1 配列のサイズは固定です。つまり、必要に応じて配列のサイズを変更できません。 ArrayList は固定サイズではなく、動的にサイズを変更できます。
2 配列は静的型です。 ArrayList は動的サイズです。
3 配列には、オブジェクトだけでなくプリミティブ データ型も格納できます。 ArrayList はプリミティブ データ型を格納できず、オブジェクトのみを格納できます。

27) 配列の長さと ArrayList のサイズの違いは何ですか?

配列の長さは length プロパティを使用して取得できますが、ArrayList は length プロパティをサポートしていませんが、size() メソッドを使用してリスト内のオブジェクトの数を取得できます。

配列の長さを調べる

 Int [] array = new int[4]; System.out.println('The size of the array is ' + array.length);  

ArrayList のサイズを調べる

 ArrayList list=new ArrayList(); list.add('ankit');�� list.add('nippun'); System.out.println(list.size());  

28) ArrayList を Array に、また Array を ArrayList に変換するにはどうすればよいですか?

Arrays クラスの asList() メソッドを使用して、Array を ArrayList に変換できます。 asList() メソッドは Arrays クラスの静的メソッドであり、List オブジェクトを受け入れます。次の構文を考慮してください。

 Arrays.asList(item)  

ArrayList クラスの toArray() メソッドを使用して、ArrayList を Array に変換できます。 ArrayList を List オブジェクトに変換するには、次の構文を検討してください。

 List_object.toArray(new�String[List_object.size()])  

29) Java ArrayList を読み取り専用にするにはどうすればよいですか?

Collections.unmodifiableCollection() メソッドを呼び出すことで、読み取り専用の Java ArrayList を取得できます。 ArrayList を読み取り専用として定義すると、add()、remove()、または set() メソッドを使用してコレクション内の変更を実行できなくなります。


30) ArrayList から重複を削除するにはどうすればよいですか?

ArrayList から重複を削除するには 2 つの方法があります。

    ハッシュセットの使用: HashSet を使用すると、ArrayList から重複要素を削除できますが、挿入順序は保持されません。 LinkedHashSet の使用: HashSet の代わりに LinkedHashSet を使用して、挿入順序を維持することもできます。

LinkedHashSet を使用して ArrayList から重複要素を削除するプロセス:

  • ArrayList のすべての要素を LinkedHashSet にコピーします。
  • clear() メソッドを使用して ArrayList を空にすると、リストからすべての要素が削除されます。
  • 次に、LinkedHashset のすべての要素を ArrayList にコピーします。

31) ArrayList を反転するにはどうすればよいですか?

ArrayList を反転するには、Collections クラスの reverse() メソッドを使用できます。次の例を考えてみましょう。

 import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; public class ReverseArrayList { public static void main(String[] args) { List list = new ArrayList(); list.add(10); list.add(50); list.add(30); Iterator i = list.iterator(); System.out.println('printing the list....'); while(i.hasNext()) { System.out.println(i.next()); } Iterator i2 = list.iterator(); Collections.reverse(list); System.out.println('printing list in reverse order....'); while(i2.hasNext()) { System.out.println(i2.next()); } } }  

出力

 printing the list.... 10 50 30 printing list in reverse order.... 30 50 10  

32) ArrayList を降順に並べ替えるにはどうすればよいですか?

ArrayList を降順に並べ替えるには、Collections クラスの reverseOrder メソッドを使用できます。次の例を考えてみましょう。

 import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; public class ReverseArrayList { public static void main(String[] args) { List list = new ArrayList(); list.add(10); list.add(50); list.add(30); list.add(60); list.add(20); list.add(90); Iterator i = list.iterator(); System.out.println('printing the list....'); while(i.hasNext()) { System.out.println(i.next()); } Comparator cmp = Collections.reverseOrder(); Collections.sort(list,cmp); System.out.println('printing list in descending order....'); Iterator i2 = list.iterator(); while(i2.hasNext()) { System.out.println(i2.next()); } } }  

出力

 printing the list.... 10 50 30 60 20 90 printing list in descending order.... 90 60 50 30 20 10  

33) ArrayList を同期するにはどうすればよいですか?

ArrayList は 2 つの方法で同期できます。

  • Collections.synchronizedList() メソッドの使用
  • CopyOnWriteArrayList の使用

3.4) ArrayList と LinkedList をいつ使用するか?

LinkedList は更新操作に使用するのが適しており、ArrayList は検索操作に使用するのが適しています。

あなたにおすすめ