ハッシュマップインタビューの質問と回答[初心者と経験者向け]

公開: 2020-09-24

java.util.HashMapのクラスは、Javaの最も重要なライブラリの1つです。 Javaで記述されたプロジェクトはめったになく、実装にHashMapのライブラリを使用していません。 これは、このデータ構造を実装する方法であり、Java関連のプログラムにとってこれはほぼ不可欠です。 HashMapは、その定義では非常に単純です。 HashMapは、非常に表形式のアプローチを使用して実装されるデータ構造です。

データ構造が1つしかない場合は、HashMapである必要があると正しく言われています。 これは非常に便利であるだけでなく、非常に時間効率が良いです。 HashMapでの単純なルックアップには、約O(1)時間しかかかりません(つまり、HashMapでのすべてのルックアップは一定時間で実行されます)。 HashTable、concurrenthashmapsなど、Javaのプログラミング言語でのHashMapの多くの実装があります。ただし、一般的な実装を探している場合は、基本的なHashMapから遠く離れてはいけません。

HashMapのこれらの各実装には、独自の機能セットとユースケースが付属しています。 マッピングを記述した順序を保持したい場合は、LinkedHashMapの使用を検討する必要があります。 自分のマッピングを並べ替える場合は、HashMapのTreeMap実装を使用する必要があります。これにより、並べ替えが行われます。

同様に、スレッドセーフであり、スケーラビリティを維持しながら並行アプリケーションでも使用できるハッシュテーブルを探している場合は、並行HashMapを探していることになります。

ご覧のとおり、HashMapを使用するにはさまざまな方法があります。 HashMapの重要性を実際に知るには、ソフトウェアエンジニアリングの職務プロファイルに関する面接の質問を参照する必要があります。 HashMapを正しく実装する方法がわからない場合、時間を適切に最適化することはできません。 したがって、プログラマーであれば、HashMapの詳細を学ぶことから離れることはできません。 そこで、次の面接の準備に役立つ、いくつかの優れたハッシュマップ面接の質問を以下にリストしました。

世界のトップ大学からオンラインでデータサイエンスコース学びましょうエグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。

目次

ハッシュマップインタビューの質問と回答

Q1。 JavaでHashMapのput()メソッドをどのように使用しますか?

回答put()のメソッドは、ハッシュと呼ばれる原則を利用することで簡単に機能します。 この関数を使用して、問題のオブジェクトをバックエンド(メモリの配列)に格納します。 バックエンドでのこのオブジェクトの正確な位置を確認できるようにするには、このput()関数と一緒に別の関数を使用する必要があります。 hashcode()関数は、前に説明した方法でput()のヘルパー関数として使用されます。

したがって、これら2つの関数が連携して機能する方法は、バックエンドで使用可能なキーとメモリ位置を検索することです。 それらが衝突した場合、両方の値(キーと値の両方の値を意味する)を持つオブジェクトが、リンクリストとも呼ばれるリストの動的実装に追加されます。 ここのいいねリストは、以前に見つかったメモリの場所に保存されます。

Q2。 オブジェクトをHashMapのキーまたは値として使用するために必要な基本的なニーズは何ですか?

回答HashMapとその実装で使用するキーと値の両方に、これら2つの関数が記述されている必要があります。 これら2つの関数の名前はequals()とhashcode()です。 キーの値を任意のHashMapに挿入するときに、hashcode()という名前の関数が使用されます。 同時に、equals()の関数は、HashMapにすでに格納されている値を取り戻そうとしている場合にのみ呼び出されます。

Q3。 HashMapですでに使用しているキーを見失ったとしましょう。 追加する次のキーは、HashMapにすでに存在します。 この場合、どうなると思いますか?

回答エラーがあるはずだと感じた場合、HashMapについて話していなくても間違いはありません。 ただし、HashMapを使用していて、値がすでにハッシュマップに存在するキーを挿入した場合、Javaコンパイラはエラーをスローしません。 代わりに、コンパイラは入力したキーに関連付けられた値を検索し、そこで値を更新するだけです。

関数put()を使用して値をハッシュマップに追加すると、この関数の戻り値はそのキーに関連付けられた古い値になります。 したがって、キーAの場合、保存されている値は1であると仮定します。ここでAの値を50とすると、put()関数によって返される値は1になります。 、およびキーAに格納される最終値は50になります。

Q4。 null値を格納する必要が生じた場合。 その場合、HashMapを使用できますか?

回答はい、その場合、ハッシュマップは保存できる値を減らさないため、問題なくハッシュマップを使用できます。 任意のハッシュマップに、必要な数のnull値を格納できます。

Q5。 Javaのハッシュマップ実装で衝突はどのように処理されますか?

回答java.util.HashMapのコードライブラリは、連鎖の方法を使用して衝突を処理します。 この連鎖が機能する方法は、キーと値のペアの両方を含むハッシュマップへの新しいエントリがリンクリストに格納され、このリストがハッシュマップの既存のデータが存在する場所(バケットの場所)に格納されることです。 。

ハッシュマップにあるすべてのキーが同じハッシュコードを持っていることが判明した場合、ハッシュマップはハッシュマップではなくなります。 リンクリストになります。 ルックアップ時間は、1のオーダー(o(1))、つまり一定の時間から、線形時間であるNのオーダー(O(N))まで増加します。

Q6。 Javaのハッシュマップの実装にnull値を持つキーを格納できますか?

回答はい、Javaのハッシュマップの実装では、null値のキーを格納できます。 ただし、保存できるのはそのようなキーを1つだけで、常にバケットリストの先頭に保存されます。 この関数がnullキーで使用されると、Null Pointer Exceptionエラーがスローされるため、ハッシュマップはここで関数hashcode()を呼び出しません。 ハッシュマップの最初のインデックスを返す場合は、キーとしてnull値を使用する代わりに、get関数を使用する必要があります。

読む:データ構造での並べ替え:カテゴリとタイプ

Q7。 ハッシュマップはどのデータ構造を模倣するように設計されていると思いますか?

回答ハッシュマップは、ハッシュテーブルのデータ構造の外観と機能を模倣することになっています。 キーと値のペアの形式で値を格納する場合は、ハッシュテーブルのデータ構造が理想的な選択肢です。 このハッシュテーブルが優先される主な理由は、ルックアップ時間のためです。 したがって、検索したいキーがある場合は、1回または一定の時間の順序で、必要な値を取り戻すことができます。

Q8。 ハッシュマップは構造や配列のようなコアデータ構造の1つではないためです。 ハッシュマップを作成するときはいつでも、内部で何が起こっていると思いますか? どのデータ構造の組み合わせがハッシュマップを提供したと思いますか?

回答ハッシュマップは実際にはハッシュテーブルを表していますが、内部的には直接実装されていません。 ハッシュマップに生命を吹き込むために、2つのよく知られたデータ構造を使用します。 リンクリストと配列を使用します。 リンクリストは、キーと値のペアを動的に格納するために使用され、配列は、これらすべてのリンクリストをそれらに格納するために使用されます。 一緒に、それらはハッシュマップを形成します。

Java 8以降、リンクリストが十分に大きくなると、Javaはリンクリストの代わりにバイナリ検索ツリーを実装します。 この変更は、時間を節約し、ハッシュマップの全体的なパフォーマンスを向上させるために行われます。

また読む:データサイエンスインタビューの質問

Q9。 同じキーの下に複数の値を格納したい場合、Javaに存在するハッシュマップの実装でそれが可能になると思いますか?

回答いいえ、重複するキーをハッシュマップに保存することはできません。 ハッシュマップにすでに存在するキーに新しい値を格納しようとすると、ハッシュマップはそのキーに以前に格納されていた値を削除し、新しい値に置き換えるだけです。

この場合、ハッシュマップのサイズは変更されません。つまり、ハッシュマップにキーが追加されることはありません。 この機能は、関数keyset()を使用してハッシュマップのすべてのキーを取得し、この関数がコレクションではなくセットを返す理由の1つです(セットではすべての値が一意である必要があるため)。

Q10。 重複する値をHashMapに保存できますか?

回答はい、重複する値をハッシュマップに保存できます。 これが、ハッシュマップからすべての値を取得する理由です。 次に、セットを取得する代わりに、コレクションを取得します。 順序が保証されていないため、リストの形式で値を提供することはありません。

Q11。 Javaのハッシュマップの実装では、スレッドセーフですか?

回答いいえ、バニラハッシュマップはJavaではスレッドセーフではありません。 理想的には、値を変更したり、任意の形式や形でハッシュマップを編集したりできるスレッドとハッシュマップを共有することは避けてください。 ただし、読み取り専用のハッシュマップを使用して、それをスレッドにフィードすることはできます。 このように、それらに含まれる値は変更されません。

Q12。 マルチスレッドを使用するアプリケーションでハッシュマップを使用するとどうなると思いますか?

回答複数のスレッドを使用するアプリケーションにハッシュマップを渡し、これらの各スレッドがハッシュマップに格納されている値を変更、追加、または削除できる場合、ハッシュマップが構築された内部データが破損します。 。 ハッシュマップを形成するために使用されたリンクが失われ、ハッシュマップの構造が失われ、その目的も失われます。 したがって、スレッド化されたアプリケーションで使用する場合は、常にスレッドセーフなハッシュマップを使用することをお勧めします。

Q13。 JavaでHashMap全体を反復処理する場合。 それを行うことができるさまざまな方法は何ですか?

回答Javaでハッシュマップを反復処理できる方法はたくさんあります。 それらのいくつかを以下に示します。

  1. 関数keySetを反復変数と組み合わせて使用​​できます。
  2. 関数enterySetを反復変数と組み合わせて使用​​できます。
  3. 関数entrySetを使用して、拡張ループで使用できます。
  4. keySetを使用して、メソッドを取得できます。

また読む: Pythonのデータ構造とアルゴリズム:知っておくべきことすべて

次は何?

データサイエンスについて知りたい場合は、IIIT-B&upGradのデータサイエンスのエグゼクティブPGプログラムをチェックしてください。これは、働く専門家向けに作成され、10以上のケーススタディとプロジェクト、実践的なハンズオンワークショップ、業界の専門家とのメンターシップを提供します。1業界のメンターとの1対1、400時間以上の学習、トップ企業との仕事の支援。

HashtableはHashMapとどう違うのですか?

同期されていないデータ構造はHashMapです。 一方、ハッシュテーブルはスレッドセーフであり、同期コードを必要とせずに多くのスレッド間で共有できます。 Hashtableは1つのnullキーまたは複数のnull値を許可しませんが、HashMapは許可します。 非スレッドアプリケーションでは、Hashtableの代わりにHashMapを使用する必要があります。 簡単に言うと、HashMapはシングルスレッドまたは非同期のアプリケーションで使用する必要があります。

HashMapまたはTreeMapを使用する方が速いですか?

TreeMapでは、値はキーによって決定されます。 nullキーを持つことはできませんが、複数のnull値を持つことができます。 これはHashMapと同じですが、昇順ではなく昇順を保持します(キーの自然な順序を使用してソートされます)。 HashMapは、配列ベースのデータ構造を使用して、ハッシュテーブルベースの実装としてハッシュ関数に従ってコンポーネントを編成します。 add()、delete()、containsなどのほとんどの操作では、HashMapはO(1)()の定数時間のパフォーマンスを予測します。 結果として、TreeMapよりもはるかに高速です。

ArrayListの代わりにHashMapを使用する方がよいのはいつですか?

保存したいデータに一意のキーが使用できる場合にのみ、HashMapは意味をなします。 キーに基づいて物事を探すときは、迅速なアクセス時間が必須であるため、それを使用する必要があります。 コレクション内のエントリの同じ順序を維持することが重要な場合は、HashMapを避ける必要があります。 それらは両方とも互いに異なり、異なる目的を果たします。 オブジェクトをJavaに格納する場合は、HashMapを使用してキーを値にマップし、それ以外の場合はArrayListを使用します。