インタビューの質問集(2)コンテナ

容器

 

18. Javaコンテナとは何ですか?

 

一般的に使用されるコンテナのカタログ:

 

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

 

  • java.util.Collectionは、コレクションインターフェース(コレクションクラスのトップレベルのインターフェース)です。これは、コレクションオブジェクトの基本的な操作に共通のインターフェイスメソッドを提供します。Collectionインターフェイスには、Javaクラスライブラリに多くの具体的な実装があります。コレクションインターフェイスの意味は、さまざまな特定のコレクションに最大の統一された操作モードを提供することです。その直接の継承インターフェイスは、リストとセットです。

  • コレクションは、コレクションのツール/ヘルプクラスであり、コレクション内の要素の並べ替え、検索、およびスレッドセーフ操作のための一連の静的メソッドを提供します。

 

 

20.リスト、セット、マップの違いは何ですか?

 

 

 

21. HashMapとHashtableの違いは何ですか?

 

  • hashMapはHashTableのcontainsメソッドを削除しますが、containsValue()およびcontainsKey()メソッドを追加します。

  • HashTableは同期であり、HashMapは非同期であるため、hashTableの方が効率的です。

  • HashMapでは空のキーを使用できますが、hashTableでは使用できません。

 

22. HashMapとTreeMapのどちらを使用するかを決める方法は?

 

マップでの要素の挿入、削除、検索などの操作には、HashMapが最適です。ただし、順序付けられたキーのセットをトラバースする必要がある場合は、TreeMapの方が適しています。コレクションのサイズによっては、HashMapに要素を追加する方が高速な場合があります。順序付けされたキートラバーサルのためにマップをTreeMapに変更してください。

 

23. HashMapの実装原理は何ですか?

 

HashMapの概要:HashMapは、ハッシュテーブルに基づくMapインターフェースの非同期実装です。この実装は、すべてのオプションのマッピング操作を提供し、null値とnullキーの使用を許可します。このクラスは、マッピングの順序を保証しません。特に、順序が永久に変更されないことを保証しません。 

HashMapのデータ構造:Javaプログラミング言語には、配列とアナログポインター(参照)の2つの基本構造があります。すべてのデータ構造は、これら2つの基本構造で構築できます。HashMapには、例外なし。HashMapは、実際には「リンクリストハッシュ」のデータ構造であり、配列とリンクリストを組み合わせたものです。

要素をHashmapに配置する場合、最初にキーのハッシュコードに従ってハッシュ値を再計算し、ハッシュ値を根絶して、配列内のこの要素の位置(添え字)を取得します(配列が他の要素をその位置に既に格納している場合)。この位置の要素はリンクリストの形式で格納され、新しく追加されたものがチェーンの先頭に配置され、最初に追加されたものがチェーンの最後に配置されます。配列内のその位置に要素がない場合、要素は配列内のその位置に直接配置されます。

HashMapの実装はJdk 1.8で最適化されていることに注意してください。リンクリストのノードデータが8を超えると、リンクリストは赤黒ツリーに変換され、元のO(n)からO(logn)にクエリ効率が向上します。

24. HashSetの実現原理について教えてください。

 

  • HashSetの最下層はHashMapによって実現されます

  • HashSetの値はHashMapのキーに格納されます

  • HashMapの値はPRESENTとして統一されています

 

25. ArrayListとLinkedListの違いは何ですか?

 

最も明らかな違いは、ArrrayListの基になるデータ構造がランダムアクセスをサポートする配列であるのに対し、LinkedListの基になるデータ構造はランダムアクセスをサポートしない二重循環リンクリストであることです。添え字を使用して要素にアクセスするには、ArrayListの時間の複雑さはO(1)ですが、LinkedListはO(n)です。

26.配列とリストを変換する方法は?

 

  • 配列にリストする:ArrayListのtoArrayメソッドを呼び出します。

  • 配列からリストへの変換:配列のasListメソッドを呼び出します。

27. ArrayListとVectorの違いは何ですか?

 

  • Vectorは同期ですが、ArrayListは同期しません。ただし、反復中にリストを変更する場合は、CopyOnWriteArrayListを使用する必要があります。 

  • ArrayListはVectorよりも高速で、同期のためにオーバーロードされることはありません。 

  • コレクションユーティリティクラスを使用して同期リストと読み取り専用リストを簡単に取得できるため、ArrayListはより用途が広いです。

 

28. ArrayとArrayListの違いは何ですか?

 

  • ArrayListはオブジェクトのみを保持できますが、Arrayは基本的なタイプとオブジェクトを保持できます。 

  • 配列は指定されたサイズで、ArrayListのサイズは固定です。 

  • Arrayは、addAll、removeAll、iteratorなどのArrayListの汎用性を提供しません。

 

29.キューのポーリング()と削除()の違いは何ですか?

 

poll()とremove()はどちらもキューから要素を取得しますが、poll()は要素の取得に失敗すると空を返しますが、remove()が失敗すると例外をスローします。

30.どのコレクションクラスはスレッドセーフですか?

 

  • vector:効率が低いため、arraylistよりも多くの同期メカニズム(スレッドセーフ)があるため、今は使用しないことをお勧めします。Webアプリケーション、特にフロントページでは、効率(ページ応答速度)が優先されることがよくあります。

  • statck:スタッククラス、先入れ先出し。

  • ハッシュテーブル:ハッシュマップよりスレッドセーフです。

  • enumeration:イテレータと同等の列挙。

 

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

 

イテレータはデザインパターンであり、オブジェクトであり、シーケンス内のオブジェクトをトラバースおよび選択できます。開発者はシーケンスの基本的な構造を理解する必要はありません。イテレータは作成コストが低いため、「軽量」オブジェクトと呼ばれることがよくあります。

 

32.イテレーターの使い方は?特徴は何ですか?

 

JavaのIterator関数は比較的単純で、一方向にしか移動できません。

  

(1)メソッドiterator()を使用するには、コンテナがIteratorを返す必要があります。Iteratorのnext()メソッドが初めて呼び出されると、シーケンスの最初の要素が返されます。注:iterator()メソッドはjava.lang.Iterableインターフェースであり、Collectionによって継承されます。

  

(2)next()を使用して、シーケンスの次の要素を取得します。

  

(3)hasNext()を使用して、シーケンスにまだ要素があるかどうかを確認します。

  

(4)remove()を使用して、新しく返された反復子の要素を削除します。

  

Iteratorは、Javaイテレータの最も単純な実装です。List用に設計されたListIteratorには、より多くの機能があります。Listを2方向からトラバースでき、Listから要素を挿入および削除できます。

33. IteratorとListIteratorの違いは何ですか?

 

  • IteratorはSetおよびListコレクションをトラバースするために使用できますが、ListIteratorはListをトラバースするためにのみ使用できます。 

  • イテレータはコレクションを順方向にのみトラバースでき、ListIteratorは順方向と逆方向の両方に使用できます。 

  • ListIteratorはIteratorインターフェースを実装し、要素の追加、要素の置換、前の要素と次の要素のインデックスの取得などの他の関数を含みます。

34.コレクションを変更できないようにする方法は

では、コレクションを変更できないようにするにはどうすればよいですか?まず、コレクション(マップ、セット、リスト...)がすべて参照型であることを明確にする必要があります。そのため、finalで変更しても、コレクションの内容は変更できます。

私たちは実験をすることができます:

ご覧のとおり、最後のキーワードを使用してマップコレクションを定義しました。この時点で、コレクションに値を渡します。最初のキーと値のペアは1,1です。変更後、キーの値を1から100に変更できます。マップコレクションの値を変更できることを説明します。

コレクションが変更されないようにするにはどうすればよいですか?
コレクションパッケージの下でunmodifiableMapメソッドを使用できます。このメソッドによって返されるマップは変更できません。彼はjava.lang.UnsupportedOperationExceptionエラーを報告します。

同様に、Collectionsパッケージは、リストおよびセットのコレクションのメソッドも提供します。
Collections.unmodifiableList(リスト)
Collections.unmodifiableSet(セット)

(終了)

リリース9件のオリジナルの記事 ウォンの賞賛0 ビュー247

おすすめ

転載: blog.csdn.net/Fabri/article/details/105175000