logo

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

Java コレクション フレームワーク で紹介されました JDK1.2 これには、すべてのコレクション クラスとインターフェイスが含まれます。 Java コレクション は、オブジェクトのコレクションを保存および操作するメカニズムを提供するフレームワークです。これにより、開発者は、データを操作するための事前にパッケージ化されたデータ構造とアルゴリズムにアクセスできます。

この記事ではトップ50を紹介しました Java コレクションのインタビューの質問 と答え ナビゲーション コレクション、WeakHashMap、ストリーム Lambda など、基本的な Java コレクション概念から高度な Java コレクション概念まですべてをカバーしています。 より新鮮な または 経験豊富な Java 開発者 、これらの Java コレクションの面接の質問は、次の Java 面接に合格するために必要な自信を与えてくれます。



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

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

50 の質問を経験者と新人の 2 つの部分に分けました。まずはフレッシャーズへの質問から始めましょう。

目次



Java コレクションの新入生向けの面接の質問

1. Java のコレクションとは何ですか?

用語 コレクション 1 つの単位として表現されるオブジェクトのグループを指します。 Java コレクション クラス階層内のクラスは 2 つに分かれています インターフェース: コレクション (java.util.コレクション) と地図 (java.util.Map) 。 Java のコレクションについて学習する際に遭遇する用語:

  • 収集フレームワーク: Java のコレクション フレームワークは、オブジェクトのグループを単一のエンティティとして表すためのクラスとインターフェイスを定義します。 C++ 開発者は、コレクション フレームワークを次のものと比較できます。 STL (標準テンプレート ライブラリ) C++ バックグラウンドからの場合は、Container Framework と Collection Framework を組み合わせます。
  • コレクションインターフェイス: クラスのインターフェイスは、どのように行うかではなく、何を行うべきかを指定します。言い換えれば、それはクラスの設計図です。このインターフェイスは、コレクション フレームワークの一部であるすべてのコレクション オブジェクトに最も一般的なメソッドを提供します。あるいは、個々のオブジェクトを全体として表します。
  • コレクションクラス: Collection Framework のメンバーであり、java.util パッケージの一部です。コレクション オブジェクトには、このクラスの多くのユーティリティ メソッドが提供されます。

2. Java のフレームワークとは何ですか?

フレームワークは以下のセットです クラス そして インターフェース 既成のアーキテクチャを提供します。新しい機能やクラスを実装するためにフレームワークを定義する必要はありません。その結果、最適なオブジェクト指向設計には、すべて同様のタスクを実行するクラスのコレクションを含むフレームワークが含まれます。フレームワークは、メソッドの呼び出し、拡張、コールバック、リスナー、その他の実装の提供など、さまざまな方法で使用できます。 Java で人気のあるフレームワークには次のようなものがあります。

  • 休止状態
  • 支柱
  • Google ウェブ ツールキット (GWT)
  • JavaServer Faces (JSF)

3. Java における配列とコレクションの違いは何ですか?

配列は、Java で一般的な名前を持つ類似した型の変数のコレクションです。 Java と C/C++ の配列にはいくつかの違いがあります。一方、コレクションは、オブジェクトのコレクションとして知られる単一のエンティティを形成する個々のオブジェクトのグループです。



配列

コレクション

配列のサイズは固定されており、一度配列を作成すると、要件に応じて増減することはできません。 コレクションは本質的に成長可能であり、私たちの要件に基づいています。サイズを拡大または縮小することができます。
メモリに関しては、配列の使用はお勧めできません。 メモリに関しては、コレクションの使用をお勧めします。
パフォーマンスの観点から、配列の使用をお勧めします。 パフォーマンスの観点から、コレクションの使用は推奨されません。
配列は、同種のデータ型の要素のみを保持できます。 コレクションは、同種の要素と異種の要素の両方を保持できます。

詳細については、記事を参照してください – Java における配列とコレクションの違い

4. Java Collections Framework で使用されるさまざまなインターフェイスは何ですか?

コレクションは、コレクション階層のルートとして知られています。コレクションは、要素として知られるオブジェクトのグループを表します。 Java プラットフォームでは、このインターフェイスの直接実装は提供されていませんが、Collection インターフェイスは List クラスと Set クラスによって実装されています。

  • コレクションインターフェース
  • リストインターフェース
  • インターフェースの設定
  • キューインターフェース
  • デキューインターフェイス
  • マップインターフェース

5. Java のコレクション フレームワークの階層について説明します。

コレクション フレームワークに必要なすべてのクラスとインターフェイスは、ユーティリティ パッケージ (java.util) に含まれています。コレクション フレームワークには、イテラブル インターフェイスと呼ばれるインターフェイスがあり、イテレータがすべてのコレクションを反復処理できるようになります。このインターフェイスに加えて、メインのコレクション インターフェイスはコレクション フレームワークのルートとして機能します。すべてのコレクションはこのコレクション インターフェイスを拡張し、それによってイテレータのプロパティとこのインターフェイスのメソッドを拡張します。次の図は、コレクション フレームワークの階層を示しています。

Java コレクション階層

6. コレクション フレームワークの利点は何ですか?

収集フレームワークの利点: 収集フレームワークの欠如により上記の一連の欠点が生じたため、収集フレームワークの利点は次のとおりです。

  • 一貫した API: API には、次のような基本的なインターフェイスのセットがあります。 コレクション セット リスト 、 または 地図 、これらのインターフェイスを実装するすべてのクラス (ArrayList、LinkedList、Vector など) には いくつかの 共通のメソッドのセット。
  • プログラミングの労力を軽減します。 プログラマーはコレクションのデザインについて心配する必要はなく、プログラム内でコレクションを最大限に活用することに集中できます。したがって、オブジェクト指向プログラミング (すなわち) 抽象化の基本概念は正常に実装されています。
  • プログラムの速度と品質が向上します。 この場合、プログラマは特定のデータ構造の最適な実装を考える必要がないため、有用なデータ構造とアルゴリズムの高性能実装を提供することでパフォーマンスが向上します。最適な実装を使用するだけで、アルゴリズム/プログラムのパフォーマンスを大幅に向上させることができます。

7. Java の ArrayList とは何ですか?

ArrayList は Java コレクション フレームワークの一部であり、java.util パッケージのクラスです。 Java で動的配列を提供します。 ArrayList の主な利点は、配列を宣言する場合はサイズを指定する必要があるが、ArrayList では、サイズを指定したい場合に ArrayList のサイズを指定する必要がないことです。

Javaの文字列関数
配列リスト

配列リストのイメージ

詳細については、記事を参照してください – JavaのArrayList

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

コレクション コレクション
それはインターフェースです。 ユーティリティクラスです。
これは、個々のオブジェクトのグループを単一の単位として表すために使用されます。 これは、コレクションの操作に使用されるいくつかのユーティリティ メソッドを定義します。
Collection は Java8 以降の静的メソッドを含むインターフェースです。インターフェイスには、抽象メソッドとデフォルト メソッドを含めることもできます。 静的メソッドのみが含まれています。

詳細については、記事を参照してください – Java でのコレクションとコレクションの例 (例)

9. Java コレクション フレームワークにおける ArrayList と LinkedList の違いは何ですか?

ArrayList と LinkedList の比較

ArrayList と LinkedList

配列リスト

リンクリスト

このクラスは、動的配列を使用して要素を格納します。ジェネリックスの導入により、このクラスはすべてのタイプのオブジェクトのストレージをサポートします。 このクラスは、二重リンク リストを使用して要素を格納します。 ArrayList と同様に、このクラスもすべてのタイプのオブジェクトのストレージをサポートします。
ArrayList の操作には、内部実装のためさらに時間がかかります。要素を削除するたびに、内部的には配列が走査され、メモリ ビットがシフトされます。 二重リンク リストにはメモリ ビットをシフトする概念がないため、LinkedList の操作は ArrayList に比べて時間がかかりません。リストが走査され、参照リンクが変更されます。
このクラスは List インターフェイスを実装します。したがって、これはリストとして機能します。 このクラスは、List インターフェイスと Deque インターフェイスの両方を実装します。したがって、リストおよび両端キューとして機能できます。
このクラスは、アプリケーションがデータの保存とデータへのアクセスを要求する場合に、より適切に機能します。 このクラスは、アプリケーションが保存されたデータの操作を要求する場合に、より適切に機能します。

詳細については、記事を参照してください – Java における ArrayList と LinkedList

10. イテレータとは何ですか?

Javaのコレクションフレームワーク イテレータを使用して要素を 1 つずつ取得します。このイテレータは、あらゆる種類の Collection オブジェクトで使用できるため、汎用的です。 Iterator を使用すると、読み取り操作と削除操作の両方を実行できます。これは、要素の削除が追加された Enumeration の改良版です。

すべてのコレクション フレームワーク実装インターフェイスの要素を列挙する場合、たとえば、 セット リスト 何について 、および Map のすべての実装クラスでは、Iterator を使用する必要があります。コレクション フレームワーク全体で使用できる唯一のカーソルはイテレータです。 Collection インターフェイスの iterator() メソッドを使用すると、イテレータ オブジェクトを作成できます。

構文:

Iterator itr = c.  iterator  ();>

注記: ここで、 c は任意の Collection オブジェクトです。 itr は Iterator インターフェイス型で、c を参照します。

詳細については、記事を参照してください – Javaのイテレータ

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

イテレータと列挙の主な違いは、イテレータにはremove()メソッドがあるのに対し、列挙にはそれがないことです。したがって、Iterator を使用すると、コレクションにオブジェクトを追加したりコレクションから削除したりすることでオブジェクトを操作できます。列挙はオブジェクトを走査してフェッチすることしかできないため、読み取り専用インターフェイスのように動作します。

詳細については、記事を参照してください – イテレータと列挙型の違い

12. Java の List と Set の違いは何ですか

リストとセットの主な違いは、リストには重複した要素を含めることができるのに対し、セットには一意の要素のみが含まれることです。リストは順序付けされており、追加されるオブジェクトの順序が維持されます。セットは順序付けされていません。

リスト

セット

リストはインデックス付きのシーケンスです。 Set はインデックスのないシーケンスです。
リストでは重複要素が許可されます このセットでは要素の重複は許可されません。
位置に応じて要素にアクセスできます。 要素への位置アクセスは許可されていません。
複数の null 要素を格納できます。 Null 要素は 1 回だけ保存できます。
リストの実装は ArrayList、LinkedList、Vector、Stack です セットの実装は HashSet、LinkedHashSet です。

詳細については、記事を参照してください – Javaのリストとセットの違い

13. Java Collections Framework のベスト プラクティスは何ですか?

Java コレクションを使用する際のベスト プラクティスの一部を次に示します。

  • プログラムは実装ではなくインターフェイスとして作成する必要があるため、後で実装を変更できます。
  • 可能な限り、ジェネリックを使用して型の安全性を確保し、ClassCastExceptions を回避してください。
  • ニーズに基づいて適切なタイプのコレクションを選択します。たとえば、サイズが固定されている場合は、ArrayList ではなく Array を使用することができます。 Map を反復処理するときは、LinkedHashMap を使用する必要があります。重複を避けるには Set が最適な方法です。
  • hashCode() および equals() の実装を回避するには、Map のキーとして JDK によって提供される不変クラスを使用します。
  • コードの可読性を高めるには、コレクションのサイズを見つけてゼロと比較する代わりに、isEmpty() を使用する必要があります。
  • 独自の実装を作成するのではなく、Collections ユーティリティ クラスを使用して、読み取り専用、同期済み、または空のコレクションを取得します。コードの再利用が強化され、安定性が向上します。

14. Java のプライオリティ キューとは何ですか?

PriorityQueue は、優先度に従ってオブジェクトを処理するために使用されます。キューは先入れ先出しアルゴリズムに従いますが、場合によってはキューの要素を優先度に従って処理する必要があるため、PriorityQueue が役に立ちます。優先キューは優先ヒープに基づいています。

優先キューの要素は、使用されるコンストラクターに応じて、自然な順序に従って、またはキューの構築時に提供されるコンパレーターによって順序付けされます。

Java の優先キュー

Java の優先キュー

宣言:

public class PriorityQueue extends AbstractQueue implements Serializable where E is the type of elements held in this queue>

このクラスは、Serializable、Iterable、Collection、および Queue インターフェイスを実装します。

15. Java の List、set、map の違いは何ですか?

リスト

セット

地図

リストインターフェイスでは要素の重複が許可されます

このセットでは要素の重複は許可されません。

マップでは要素の重複は許可されません

リストでは挿入順序が維持されます。

このセットでは、挿入順序は維持されません。

また、マップは挿入順序を維持しません。

任意の数の null 値を追加できます。

ただし、セット内には null 値がほぼ 1 つだけあります。

マップでは、最大で 1 つの null キーと任意の数の null 値が許可されます。

リスト実装クラスは Array List と LinkedList です。

セット実装クラスは、HashSet、LinkedHashSet、および TreeSet です。

マップ実装クラスは、HashMap、HashTable、TreeMap、ConcurrentHashMap、および LinkedHashMap です。

詳細については、記事を参照してください – JavaのList、Set、Mapの違い

16. キューとスタックの違いは何ですか?

スタック

スタックは LIFO 原則に基づいて機能します。これは、最後に挿入された要素が最初に取り出される要素になることを意味します。 キューは FIFO 原理に基づいて機能します。これは、最初に挿入された要素が最初に取り出される要素になることを意味します。
スタックでは、挿入と削除は先頭からのみ行われます。 キューでは、挿入はリストの後部で行われ、削除はリストの前部から行われます。
挿入操作をプッシュ操作といいます。 挿入操作はエンキュー操作と呼ばれます。
削除操作はポップ操作と呼ばれます。 削除操作はデキュー操作と呼ばれます。
スタックの先頭は常にリストの最後の要素を指します。これがリストにアクセスするために使用される唯一のポインターです。 キューにアクセスするために 2 つのポインターが維持されます。前部ポインタは最初に挿入された要素を指し、後部ポインタは最後に挿入された要素を指します。

17. Java の BlockingQueue とは何ですか?

Java の BlockingQueue インターフェイスは、ConcurrentHashMap、Counting Semaphore、CopyOnWriteArrrayList などの他のさまざまな同時ユーティリティ クラスとともに Java 1.5 に追加されています。 BlockingQueue インターフェイスは、BlockingQueue がいっぱいまたは空の場合にブロックを導入することで、(キューに加えて)フロー制御をサポートします。

満杯のキューに要素をエンキューしようとするスレッドは、他のスレッドが 1 つ以上の要素をデキューするか、キューを完全にクリアすることによってキューにスペースを作るまでブロックされます。同様に、他のスレッドが項目を挿入するまで、空のキューから削除しようとするスレッドをブロックします。 BlockingQueue は null 値を受け入れません。 null 項目をキューに追加しようとすると、NullPointerException がスローされます。

BlockingQueueの使用法

Javaのブロッキングキュー

Javaのブロッキングキュー

BlockingQueue の階層

Java のブロッキング キューの階層

Java のブロッキング キューの階層

宣言:

public interface BlockingQueue extends Queue>

ここ、 そして コレクションに格納されている要素のタイプです。

詳細については、記事を参照してください – JavaのBlockingQueueインターフェース

18. hashCode() とは何ですか?

Java ハッシュ コードを示す画像

Java ハッシュ コードを示す画像

hashCode() メソッドは、ハッシュコード値を整数として返します。これは、指定された入力オブジェクトのハッシュ値を計算する Java オブジェクト クラスで定義されます。ハッシュコード値は主に、HashMap、HashSet、HashTable などのハッシュベースのコレクションで使用されます。このメソッドは、equals() メソッドをオーバーライドするすべてのクラスでオーバーライドする必要があります。

構文:

public int hashCode() // This method returns the hash code value // for the object on which this method is invoked.>

詳細については、記事を参照してください – Javaのequals()メソッドとhashCode()メソッド

19. Java Collection Framework の ArrayList と Vector を区別します。

コレクションのインタビューでは、この質問がよく聞かれます。ただし、Vector は同期されますが、ArrayList は同期されません。 ArrayList は Vector よりも高速です。 ArrayList の配列サイズは必要に応じて 50% 増加し、Vector の容量は必要に応じて 2 倍になります。

ハフマンコーディングコード
Javaの配列リストとベクトル

Javaの配列リストとベクトル

配列リスト

ベクター

ArrayList が同期されていません ベクトルは同期されています。
要素の数がその容量を超える場合、ArrayList のサイズは現在の配列サイズの 50% まで増分されます。 要素の数がその容量を超える場合、ArrayList のサイズは現在の配列サイズの 100% まで増分されます。
ArrayList は非同期なので高速です。 Vector は同期しているため遅くなります。
イテレータ インターフェイスは要素を走査するために使用されます。 イテレータ インターフェイスまたは Enumeration を使用して、ベクトルを走査できます。

詳細については、記事を参照してください – Java における Vector と ArrayList

20. Iterator と ListIterator を区別します。

イテレーター

リスト反復子

コレクション内に存在する要素は前方向にのみトラバースできます。 コレクション内に存在する要素を前方と後方の両方の方向にトラバースできます。
マップ、リスト、セットを横断するのに役立ちます。 List のみを走査でき、他の 2 つは走査できません。
Iterator を使用してインデックスを取得することはできません。 nextIndex() やpreviousIndex() のようなメソッドがあり、List を走査しながらいつでも要素のインデックスを取得できます。
コレクション内に存在する要素を変更または置換することはできません set(E e) を使用して要素を変更または置換できます。

詳細については、記事を参照してください – Iterator と ListIterator の違い

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

イテレータ: これは、任意の Collection オブジェクトに適用できるため、ユニバーサルな反復子です。 Iterator を使用すると、読み取り操作と削除操作の両方を実行できます。

構文:

// Here 'c' is any Collection object. itr is of // type Iterator interface and refers to 'c' Iterator itr = c.iterator();>

列挙: 列挙 (または enum) はユーザー定義のデータ型です。これは主に整数定数に名前を割り当てるために使用され、名前によってプログラムが読みやすく、保守しやすくなります。

構文:

// A simple enum example where enum is declared // outside any class (Note enum keyword instead of // class keyword) enum Color { RED, GREEN, BLUE; }>

イテレータ

列挙

イテレータはすべてのコレクション クラスに適用できるため、ユニバーサル カーソルです。 列挙はレガシー クラスにのみ適用されるため、ユニバーサル カーソルではありません。
イテレータには、remove() メソッドがあります。 列挙には、remove() メソッドがありません。
イテレータは変更を行うことができます(たとえば、トラバーサル中にコレクションから要素を削除するremove()メソッドを使用します)。 列挙インターフェイスは読み取り専用インターフェイスとして機能するため、コレクションの要素をトラバースしている間はコレクションを変更することはできません。
イテレータはレガシー インターフェイスではありません。 Iterator は、HashMap、LinkedList、ArrayList、HashSet、TreeMap、および TreeSet の走査に使用できます。 Enumeration は、Vector および Hashtable を走査するために使用されるレガシー インターフェイスです。

詳細については、記事を参照してください – イテレータと列挙型の違い

22. Java ハッシュマップの特徴は何ですか?

HashMap は HashTable に似ていますが、非同期です。これにより、null キーも格納できますが、null キー オブジェクトは 1 つだけ存在する必要があり、null 値はいくつでも存在できます。このクラスはマップの順序を保証しません。このクラスとそのメソッドを使用するには、インポートする必要があります java.util.ハッシュマップ パッケージまたはそのスーパークラス。

Javaのハッシュマップ

Javaのハッシュマップ

構文:

  public class   HashMap   extends   AbstractMap   implements   Map, Cloneable, Serializable>

パラメーター: これは次の 2 つのパラメータを取ります。

  • このマップによって維持されるキーのタイプ (K)
  • マッピングされた値のタイプ (V)

詳細については、記事を参照してください – Java の HashMap と例

23. コレクションインターフェイスとは何ですか?

コレクション インターフェースは Java Collections Framework のメンバーです。の一部です java.util パッケージ。これは、コレクション階層のルート インターフェイスの 1 つです。 Collection インターフェイスは、どのクラスによっても直接実装されません。ただし、List、Queue、Set などのサブタイプまたはサブインターフェイスを介して間接的に実装されます。

例えば、 HashSet クラスは、Collection インターフェイスのサブインターフェイスである Set インターフェイスを実装します。コレクション実装が特定の操作を実装していない場合は、UnsupportedOperationException をスローする対応するメソッドを定義する必要があります。

コレクションの階層:

Java のコレクション インターフェイス

Java のコレクション インターフェイス

24. リストインターフェイスについて説明します。

Javaのクラスインターフェース

Javaのクラスインターフェース

Java では、List インターフェイスを使用して、ユーザーが順序付けられたオブジェクトのコレクションを保存できるようになります。リストは Collection の子インターフェイスです。コレクションでは、リストは重複した値を持つことができるオブジェクトの順序付けされたコレクションです。 List は挿入順序を保持するため、位置アクセスと挿入が可能になり、値の重複も許可されます。

構文:

public interface List extends Collection ;>

このリスト インターフェイスは、ArrayList、Vector、Stack などのさまざまなクラスによって実装されます。すべてのサブクラスがリストを実装するため、これらのクラスのいずれかを使用してリスト オブジェクトをインスタンス化できます。

例:

リスト al = 新しい ArrayList ();
リスト ll = 新しい LinkedList ();
リスト v = 新しいベクトル ();

ここで、T はオブジェクトのタイプです

Javaの配列リスト

Javaの配列リスト

List インターフェースを実装するクラスは次のとおりです。

  • 配列リスト
  • リンクリスト
  • ベクター
  • スタック

25. asList() メソッドを使用して、指定された配列をコレクションに変換するプログラムを作成します。

配列ベースのデータをコレクションベースに変換するには、次のように使用できます。 java.util.Arrays クラス。このクラスは、配列をコレクションに変換する静的メソッド asList(T… a) を提供します。

ジャワ




// Convert an Array into Collection in Java> // import java util library> import> java.util.*;> > // class for writing logic of the problem> public> class> ArrayToCollection {> >public> static> void> main(String args[])> >{> >// array input> >String students[] = {>'Kamlesh'>,>'Abhay'>,> >'Abhishek'>,>'Shivansh'> };> > >// printing input elements for comparison> >System.out.println(>'Array input: '> >+ Arrays.toString(students));> > >// converting array into Collection> >// with asList() function> >List studentList = Arrays.asList(students);> > >// print converted elements> >System.out.println(>'Converted elements: '> >+ studentList);> >}> }>

>

>

出力

Array input: [Kamlesh, Abhay, Abhishek, Shivansh] Converted elements: [Kamlesh, Abhay, Abhishek, Shivansh]>

26. HashSet と HashMap の区別

ハッシュセット

ハッシュマップ

HashSet は Set インターフェイスを実装します HashMap は Map インターフェイスを実装します
重複は許可されません はい、重複値は許可されますが、重複キーは許可されません
HashSet ではダミー値が許可されます。 HashMap ではダミー値は許可されません。
追加操作中には単一のオブジェクトが必要です 2 追加操作中にオブジェクトが必要です
HashMapに比べて速度が比較的遅い ここではハッシュ技術が使用されているため、速度は HashSet よりも比較的高速です。
単一の null 値を持つ 単一の null キーと任意の数の null 値
挿入にはAdd()メソッドが使用されます 挿入には put() メソッドが使用されます。

詳細については、記事を参照してください – ハッシュマップとハッシュセットの違い

27. HashSet と HashTable を区別します。

ハッシュセット

ハッシュ表

HashSet では NULL 要素が許可されます HashTable では NULL 要素は許可されません。

HashSet に挿入するオブジェクトは、同じ順序で挿入されるとは限りません。オブジェクトはハッシュ コードに基づいて挿入されます。 LinkedHashSet は順序を維持するために使用できます。

HashTable は挿入順序を維持しません。
HashSet は同期されていませんが、外部で同期することができます。 ハッシュテーブルは同期されています。
HashSet への挿入には add() メソッドが使用されます put() メソッドは HashTable への挿入に使用されます

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

負荷率が増加すると容量が増加するため、現在の要素と初期容量の比率がしきい値を超えた場合、HashMap の操作の複雑さは O(1) のままになります。 O(1) の演算複雑さの意味は、検索と挿入の演算に一定の時間がかかることを意味します。デフォルトの負荷率サイズは次のとおりです。 0.75 。デフォルトの容量は、初期容量に負荷率を乗算して計算されます。

詳細については、記事を参照してください – Java の HashMap の負荷係数と例

Java Collection 経験者向けの面接の質問

29. Java の Comparable と Comparator の違いは何ですか?

Java には、クラスのデータ メンバーを使用してオブジェクトを並べ替えるための 2 つのインターフェイスが用意されています。

  • 匹敵します
  • コンパレータ

匹敵します

コンパレータ

Comparable インターフェイスは、単一の並べ替えシーケンスを提供します。 Comparator インターフェイスは、複数の並べ替えシーケンスを提供します。
実際のクラスは同等のインターフェイスによって変更されます 実際のクラスは Comparator インターフェイスによって変更されません。
要素を並べ替えるには、compareTo() メソッドが使用されます。 要素を並べ替えるには、compare() メソッドが使用されます。
Comparable はパッケージ java.lang に存在します コンパレータはパッケージ java.util に存在します

詳細については、記事を参照してください – Java の Comparable と Comparator

30. フェイルファストとフェイルセーフの違いは何ですか?

Java のイテレータは、Collection オブジェクトを反復処理するために使用されます。 Fail-Fast イテレータは即座にスローします ConcurrentModificationException ある場合 構造変更 コレクションの。構造の変更とは、スレッドがコレクションを反復処理している間に、コレクションに要素を追加または削除することを意味します。 ArrayList クラスおよび HashMap クラスのイテレーターは、フェイルファスト イテレーターの例です。

フェイルファスト フェイルセーフ
反復プロセス中にオブジェクトを変更すると、ConcurrentModificationException がスローされます。 例外はスローされません
Fail-Fast では、プロセス中に必要なメモリが少なくなります。 フェールセーフ反復子は、プロセス中により多くのメモリを必要とします。
クローン オブジェクトは反復プロセス中には作成されません。 クローン オブジェクトまたはコピーは、反復プロセス中に作成されます。
Fail-Fast では、反復プロセス中の変更は許可されません。 フェールセーフにより、反復プロセス中に変更が可能になります。
フェイルファストは高速です。 フェイルセーフはフェイルファストよりもわずかに遅くなります。

例:

ArrayList、Vector、HashMap、HashSet など

例:

ConcurrentHashMap、CopyOnWriteArrayList など

詳細については、記事を参照してください – Java のフェイルファーストイテレータとフェイルセーフイテレータ

31. ラムダ式を使用してリストを反復するプログラムを作成します。

反復は、 ラムダ式。

構文:

list_name.forEach(variable->{//コードのブロック})>>

ジャワ




// Java Program to iterate over a List> // using forEach()> > // Importing all classes of> // java.util method> import> java.util.*;> > // Class> class> GFG {> > >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating an ArrayList> >List l =>new> ArrayList();> > >// Adding elements to the List> >// Custom inputs> >l.add(>'Geeks'>);> >l.add(>'for'>);> >l.add(>'Geeks'>);> > >// Lambda expression printing all elements in a List> >l.forEach((temp) ->{ System.out.println(temp); });>> >}> }>

>

Javaスイッチint

>

出力

Geeks for Geeks>

詳細については、記事を参照してください – Java でリストを反復処理する

32.IdentityHashMapとは何ですか?

IdentityHashMap は、Hashtable を使用して Map インターフェイスを実装し、オブジェクトの等価性ではなく参照の等価性を使用してキー (および値) を比較します。このクラスは Map インターフェイスを実装しますが、equals() メソッドを使用してオブジェクトを比較することを要求する Map の一般規約を意図的に破っています。このクラスは、ユーザーが参照を使用してオブジェクトを比較できるようにする場合に使用されます。これは java.util パッケージに属します。

詳細については、記事を参照してください – JavaのIdentityHashMapクラス

33. 列挙を使用して HashTable の内容を表示するプログラムを Java で作成します。

hashtable クラスは、キーを値にマップするハッシュ テーブルを実装します。 null 以外のオブジェクトはキーまたは値として使用できます。ハッシュテーブルにオブジェクトを正常に格納したり、ハッシュテーブルからオブジェクトを取得したりするには、キーとして使用されるオブジェクトが hashCode メソッドとquals メソッドを実装する必要があります。以下は、列挙を使用して HashTable の内容を表示するプログラムです。

ジャワ




// Java Program to Demonstrate Getting Values> // as an Enumeration of Hashtable class> > import> java.io.*;> import> java.util.Enumeration;> import> java.util.Hashtable;> > // Main class> // EnumerationOnKeys> public> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> >// Creating an empty hashtable> >Hashtable hash> >=>new> Hashtable();> > >// Inserting key-value pairs into hash table> >// using put() method> >hash.put(>1>,>'Geeks'>);> >hash.put(>2>,>'for'>);> >hash.put(>3>,>'Geeks'>);> > >// Now creating an Enumeration object> >// to read elements> >Enumeration e = hash.elements();> > >// Condition holds true till there is> >// single key remaining> > >// Printing elements of hashtable> >// using enumeration> >while> (e.hasMoreElements()) {> > >// Printing the current element> >System.out.println(e.nextElement());> >}> >}> }>

>

>

PCを速くするものは何ですか
出力

Geeks for Geeks>

34. HashMap に存在する値のコレクション ビューを取得するプログラムを Java で作成します。

Java の HashMap クラスには、HashMap 値からコレクションを作成するための java.util.HashMap.values() メソッドがあります。基本的に、HashMap 値のコレクション ビューを返します。

ジャワ




// Java code to illustrate the values() method> import> java.util.*;> > public> class> Hash_Map_Demo {> >public> static> void> main(String[] args)> >{> > >// Creating an empty HashMap> >HashMap hash_map> >=>new> HashMap();> > >// Mapping string values to int keys> >hash_map.put(>0>,>'Welcome'>);> >hash_map.put(>1>,>'to'>);> >hash_map.put(>2>,>'Geeks'>);> >hash_map.put(>3>,>'4'>);> >hash_map.put(>4>,>'Geeks'>);> > >// Displaying the HashMap> >System.out.println(>'Initial Mappings are: '> >+ hash_map);> > >// Using values() to get the set view of values> >System.out.println(>'The collection is: '> >+ hash_map.values());> >}> }>

>

>

出力

Initial Mappings are: {0=Welcome, 1=to, 2=Geeks, 3=4, 4=Geeks} The collection is: [Welcome, to, Geeks, 4, Geeks]>

詳細については、記事を参照してください – JavaのHashMap value()メソッド

35. 2 つの ArrayList を 1 つの ArrayList に結合するプログラムを作成します。

Java に 2 つの ArrayList がある場合、私たちのタスクはこれらの ArrayList を結合することです。

ジャワ




// Java program to demonstrate> // How to join ArrayList> > import> java.util.*;> > public> class> GFG {> >public> static> void> main(String args[])> >{> > >ArrayList list_1 =>new> ArrayList();> > >list_1.add(>'Geeks'>);> >list_1.add(>'For'>);> >list_1.add(>'ForGeeks'>);> > >// Print the ArrayList 1> >System.out.println(>'ArrayList 1: '> + list_1);> > >ArrayList list_2 =>new> ArrayList();> > >list_2.add(>'GeeksForGeeks'>);> >list_2.add(>'A computer portal'>);> > >// Displaying the ArrayList 2> >System.out.println(>'ArrayList 2: '> + list_2);> > >// using Collection.addAll() method to join two> >// arraylist> >list_1.addAll(list_2);> > >// Print the joined ArrayList> >System.out.println(>'Joined ArrayLists: '> + list_1);> >}> }>

>

>

出力

ArrayList 1: [Geeks, For, ForGeeks] ArrayList 2: [GeeksForGeeks, A computer portal] Joined ArrayLists: [Geeks, For, ForGeeks, GeeksForGeeks, A computer portal]>

詳細については、記事を参照してください – Java で 2 つの ArrayList を結合する

36. Java で ArrayList を同期するにはどうすればよいですか?

Collections.synchronizedList() メソッドを使用すると、Java でコレクションを同期できます。 SynchronizedList() は、選択に基づいた同期された (スレッドセーフな) リストを返します。

ジャワ




// Java program to show synchronization of ArrayList> import> java.io.*;> import> java.util.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >// Non Synchronized ArrayList> >List list =>new> ArrayList();> > >list.add(>'Eat'>);> >list.add(>'Coffee'>);> >list.add(>'Code'>);> >list.add(>'Sleep'>);> >list.add(>'Repeat'>);> > >// Synchronizing ArrayList in Java> >list = Collections.synchronizedList(list);> > >// we must use synchronize block to avoid> >// non-deterministic behavior> >synchronized> (list)> >{> >Iterator it = list.iterator();> >while> (it.hasNext()) {> >System.out.println(it.next());> >}> >}> >}> }>

>

>

出力

Eat Coffee Code Sleep Repeat>

37. Java のプロパティ クラスとは何ですか?

プロパティ クラスは Hashtable のサブクラスです。プロパティ クラスには、キーが文字列であり、値も文字列である値のリストが格納されます。プロパティでは他のプロパティ クラス リストを定義できますが、デフォルトはプロパティです。

プロパティ クラスの特徴:

  • プロパティは Hashtable のサブクラスです。
  • プロパティ ファイルは、キーが文字列であり、値も文字列である値のリストの文字列データ型を格納および取得するために使用されます。
  • 元のプロパティ リストに特定のキー プロパティが含まれていない場合は、代わりにデフォルトのプロパティ リストが検索されます。
  • オブジェクトは、外部同期なしで複数のスレッドで共有できます。
  • プロパティ クラスを使用して、システムのプロパティを取得できます。

詳細については、記事を参照してください – Javaのプロパティクラス

38. マルチスレッド Java アプリケーションで HashMap を使用するとどうなりますか?

マルチスレッド環境では、複数のスレッドがマッピングの追加、削除、変更など、マップの構造を変更すると、HashMap の内部データ構造が破損し、リンクの欠落や不正なエントリが存在し、マップ自体が破損する可能性があります。全く役に立たなくなる。したがって、同時アプリケーションでは HashMap を使用しないでください。代わりに、スレッドセーフな ConcurrentHashMap または Hashtable を使用してください。 ConcurrentHashMap には、ハッシュテーブルのすべてのメソッドと、取得と更新の完全な同時実行性が含まれています。

ThreadSafeConcurrentHashMap はどのようにしてスレッドセーフになったのでしょうか?

  • java.util.Concurrent.ConcurrentHashMap クラスは、マップをセグメントに分割することでスレッド セーフを提供します。これにより、ロックはセグメントごとに 1 回だけ、つまりスレッドごとに 1 回だけ取得できます。
  • ConcurrentHashMap の読み取り操作にはロックは必要ありません。

詳細については、記事を参照してください – ConcurrentHashMap は Java でスレッド セーフをどのように実現しますか?

39. HashMap の 2 つの異なるキーが同じ hashcode() を返した場合はどうなりますか?

HashMap の 2 つの異なるキーが同じハッシュ コードを返す場合、それらは同じバケット内に存在します。したがって、衝突が発生します。衝突の場合、つまり、2 つ以上のノードのインデックスが同じであり、ノードはリンク リストによって結合されます。つまり、2 番目のノードは最初のノードによって参照され、3 番目のノードは 2 番目のノードによって参照されます。

詳細については、記事を参照してください – Java での HashMap の内部動作

40.WeakHashMapとは何ですか?

WeakHashMap は Map インターフェイスを実装します。 HashMap とは異なり、WeakHashMap は、WeakHashMap に関連付けられているにもかかわらず、キーとして指定されたオブジェクトに参照が含まれていない場合でも、ガベージ コレクションを許可します。言い換えれば、ガベージ コレクターは WeakHashMap よりも優れています。

詳細については、記事を参照してください – Java のハッシュマップと WeakHashMap

41. UnsupportedOperationException とは何ですか?

API またはリスト実装のコンテキストでは、UnsupportedOperationException は一般的な例外です。要求された操作を実行できない場合、例外がスローされます。このクラスは、Java Collections Framework のメンバーです。

構文:

public class UnsupportedOperationException extends RuntimeException>

詳細については、記事を参照してください – UnsupportedOperationException

42. Java でコレクションを読み取り専用にするにはどうすればよいですか?

読み取り専用コレクションを作成するには、オブジェクトをデータのフェッチのみに制限し、データの追加や削除は行わないようにします。 Java には、unmodifiableCollection()、unmodifiableMap()、ununmodifiableSet() など、さまざまな Collection タイプに応じたさまざまなメソッドがあります。java.util.collections クラスはすべてのメソッドを定義します。 unmodifiableCollection() メソッドは、読み取り専用のコレクションを作成します。 Collection クラスへの参照が必要です。 Set Interface のオブジェクトがある場合は、次のように使用できます。 ununmodifiableSet() 読み取り専用にします。

詳細については、記事を参照してください – Java でコレクションを読み取り専用にするにはどうすればよいですか?

43. JavaにおけるPriorityQueueとTreeSetの違いは?

優先キュー

ツリーセット

PriorityQueue は JDK 1.5 に付属しています。 TreeSet は JDK 1.4 に付属しています。
PriorityQueue で使用されるデータ構造は Queue です。 TreeSet で使用されるデータ構造は Set です。
重複した要素は許可されます。 重複した要素は許可されません。
ルート要素を除いて、残りの要素は PriorityQueue 内の特定の順序に従いません。 TreeSet では、すべての要素がソートされた順序のままになります。
PriorityQueue を使用すると、最大または最小の要素を O(1) 時間で取得できます。 TreeSet には、最大または最小の要素を O(1) 時間で取得する方法はありませんが、並べ替えられた順序で配置されているため、最初または最後の要素を O(1) 時間で取得します。

詳細については、記事を参照してください – PriorityQueue と TreeSet の違い

44. Java のダイヤモンド演算子とは何ですか?

ダイヤモンド演算子は、プログラム内でチェックされていない警告を回避しながら、オブジェクトを作成する際のジェネリックスの使用を簡素化するために使用されます。 Java 7 で Diamond 演算子が導入された場合、以下に示すように、式の右側のジェネリック型を指定せずにオブジェクトを作成できます。

構文:

List list = new ArrayList();>

詳細については、記事を参照してください – ダイヤモンドオペレーター

正規表現Javaとは何ですか

45. Java で TreeMap はどのように機能しますか?

ツリーマップ はキーと値のペアを格納しますが、TreeMap はキーを HashMap のように降順ではなく昇順に並べ替えます。使用されるコンストラクターに応じて、TreeMap はキーに基づいて、またはコンパレーターによって並べ替えられます。 TreeMap では、要素は赤黒ツリーに基づいて並べ替えられます。赤黒ツリーは、各ノードに追加ビットがあり、そのビットが色 (赤または黒) として解釈される自己平衡型二分探索ツリーです。これらの色は、挿入および削除中にツリーのバランスが保たれるようにするために使用されます。

Javaのノードの構造

Javaのノードの構造

詳細については、記事を参照してください – Java での TreeMap の内部動作

46. JavaでMapを反復処理する方法をリストアップしますか?

HashMap クラスは、データを (Key, Value) ペアに格納し、別のタイプのインデックスによってアクセスすることにより、Java の Map インターフェイスを提供します。このクラスを使用するには、インポートする必要があります java.util.HashMap パッケージまたはそのスーパークラス。

HashMap を反復処理する方法は数多くありますが、そのうちの 5 つを以下に示します。

  1. Iterators を使用して HashMap EntrySet を反復処理します。
  2. Iterator を使用して HashMap KeySet を反復処理します。
  3. for-each ループを使用して HashMap を反復します。
  4. ラムダ式を使用して HashMap を反復処理します。
  5. Stream API を使用して HashMap をループします。

詳細については、記事を参照してください – Java で HashMap を反復する方法

47. Java の CopyOnWriteArrayList とは何ですか?

JavaのCopyOnWriteArrayList

JavaのCopyOnWriteArrayList

JDK 1.5 では、CopyOnWriteArrayList と呼ばれる ArrayList の拡張バージョンが導入され、すべての変更 (追加、設定、削除など) が新しいコピーによって実装されます。これは java.util.concurrent にあります。同時環境で使用するために作成されたデータ構造です。スレッドベースの環境では、CopyOnWriteArrayList は頻繁に読み取り、頻繁に更新することを目的としています。 CopyOnWriteArrayList は、ArrayList のスレッドセーフ バージョンです。

詳細については、記事を参照してください – JavaのCopyOnWriteArrayList

48. JavaのEnumMapとは何ですか?

EnumMap は、列挙型に固有の Map インターフェイスの実装です。 EnumMap クラスは Java Collections Framework のメンバーであり、同期されていません。 AbstractMap を拡張し、Java で Map インターフェイスを実装します。 EnumMap は java.util パッケージに属します。

構文:

パブリック クラス EnumMapAbstractMap を拡張すると、Serializable、Cloneable が実装されます。

// K は Enum を拡張する必要があり、キーが指定された enum 型である必要があるという要件が強制されます。

パラメーター:

  • キーオブジェクトタイプ
  • 値オブジェクトのタイプ
JavaのEnumMap

JavaのEnumMap

詳細については、記事を参照してください – JavaのEnumMapクラス

49. Hashmap は内部的にどのように機能しますか?

HashMap はハッシュの原理に基づいて機能します。 HashMap には Node の配列が含まれており、Node は次のオブジェクトを持つクラスを表すことができます。

  • 整数ハッシュ
  • Kキー
  • V値
  • 次のノード

HashMap の内部動作:

  • ハッシュ化
  • バケツ
  • ハッシュマップでのインデックス計算

詳細については、記事を参照してください – Java での HashMap の内部動作

五十。 ハッシュマップのイテレータがフェイルファストとみなされるのはなぜですか?

フェイルファスト反復子は、外部のスレッドが反復処理を行っているコレクションを変更しようとすると、ただちに同時変更例外をスローします。フェイルファスト機能により、コレクションの変更が将来的に異常な動作を引き起こす可能性があることが検出された場合、反復子はただちに失敗します。

早く失敗してください この機能により、コレクションの変更が将来の任意の時点で異常な動作を引き起こす可能性があると反復子が判断した場合、直ちに失敗することが保証されます。

例:

ジャワ




// Java code to demonstrate remove> // case in Fail-fast iterators> > import> java.io.*;> import> java.util.ArrayList;> import> java.util.Iterator;> > public> class> GFG {> >public> static> void> main(String[] args)> >{> >ArrayList arr =>new> ArrayList();> >arr.add(>1>);> >arr.add(>2>);> >arr.add(>3>);> >arr.add(>4>);> >arr.add(>5>);> > >Iterator it = arr.iterator();> >while> (it.hasNext()) {> >if> (it.next() ==>2>) {> >// will not throw Exception> >it.remove();> >}> >}> > >System.out.println(arr);> > >it = arr.iterator();> >while> (it.hasNext()) {> >if> (it.next() ==>3>) {> >// will throw Exception on> >// next call of next() method> >arr.remove(>3>);> >}> >}> >}> }>

>

>

出力:

[1, 3, 4, 5] Exception in thread 'main' java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at FailFastExample.main(FailFastExample.java:28)>

結論

Java コレクション Java はさまざまな業界で広く使用されているため、Java 開発者やプログラマーにとっては、このことを理解することが重要です。開発者にとって、Java コレクションの中核となる概念をしっかりと理解することが重要です。 Java は、以下のようなトップ企業で最も広く使用されている言語の 1 つです。 ウーバー エアビーアンドビー グーグル Netflix インスタグラム 、スポティファイ、 アマゾン これらの企業またはその他の IT 企業に入社するには、Java ベースのオンライン評価と技術面接を突破するために、Java コレクションの面接でよく聞かれる質問をマスターする必要があります。

コーディングの質問を練習したい場合は、 JAVA コレクション プログラム 役立つリソースになるかもしれません。

Java コレクションの面接の質問 – FAQ

1. Java の面接の質問におけるコレクションとは何ですか?

Java のコレクションは、オブジェクトのコレクションを保存および操作するために使用されるフレームワークです。

2. Java の 4 つのコレクション クラスとは何ですか?

Java には多くのコレクションがありますが、その中で最もよく使用されるコレクションは次のとおりです。

  1. 配列リスト
  2. リンクリスト
  3. ハッシュセット
  4. スタック

3. HashMap は重複キーを持つことができますか?

いいえ、HashMap は重複キーを持つことができません。 HashMap は Java のコレクションの 1 つであるため、キーと値の形式で値を格納し、すべてのキーに独自の値が関連付けられています。つまり、キーに 2 つの値を持たせることはできないため、HashMap では重複したキーを持てないことになります。

4. なぜ配列はコレクションではないのでしょうか?

配列はコレクションではありません。これはすべて、コレクションと配列の機能の違いによるものです。その違いについては、以下で説明します。

  • 配列のサイズは一度宣言すると変更できません
  • 配列は、同種のデータ型の要素のみを保持できます。
  • 配列はプリミティブ データ型とオブジェクトの両方を保持できますが、コレクションではラッパー オブジェクトのみを保持できます。