第二に、コンテナ
18. Javaコンテナとは何ですか?
示されているように:
最初にコレクションとマップに分かれています。
コレクションはリスト、セット、キューに分けられます。
リストは、ArrayListとLinkedListに分かれています。
セットはHashSet、LinkedHashSet、TreeSetに分かれています。
Queueの下にPriorityQueueがあります。
マップ下分はHashMap、LinkedHashMap、TreeMap、WeakHashMap;
コレクションは個々の要素オブジェクトのシーケンスを表し、マップは「キーと値のペア」オブジェクトのコレクションを表します。
19.コレクションとコレクションの違いは何ですか?
java.util.Collectionは、コレクションインターフェース(コレクションクラスのトップレベルのインターフェース)です。これは、コレクションオブジェクトの基本的な操作に共通のインターフェイスメソッドを提供します。Collectionインターフェイスには、Javaクラスライブラリに多くの具体的な実装があります。コレクションインターフェイスの意味は、さまざまな特定のコレクションに最大の統一された操作モードを提供することです。その直接の継承インターフェイスは、リストとセットです。
コレクションは、コレクションのツール/ヘルプクラスであり、コレクション内の要素の並べ替え、検索、およびスレッドセーフ操作のための一連の静的メソッドを提供します。
20.リスト、セット、マップの違いは何ですか?
21. HashMapとHashtableの違いは何ですか?
1. HashMapはHashTableのcontainsメソッドを削除しましたが、containsValue()およびcontainsKey()を追加しました
2. HashTableは同期され、HashMapは非同期であるため、hashTableの方が効率的です。
3. 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の実現原理について教えてください。
1. HashSetの最下層はHashMapによって実現されます
2. HashSetの値はHashMapのキーに格納されます
3. HashMapの値はPRESENTとして統一されます
25. ArrayListとLinkedListの違いは何ですか?
最も明らかな違いは、 ArrrayListの基になるデータ構造がランダムアクセスをサポートする配列であるのに対し、LinkedListの基になるデータ構造はランダムアクセスをサポートしない二重循環リンクリストであることです。添え字を使用して要素にアクセスするには、ArrayListの時間の複雑さはO(1)ですが、LinkedListはO(n)です。
26.配列とリストを変換する方法は?
1.リストが配列に変換されます。ArrayListのtoArrayメソッドを呼び出します。
2. 配列からリストへの変換:配列のasListメソッドを呼び出します。
27. ArrayListとVectorの違いは何ですか?
Vectorは同期ですが、ArrayListは同期しません。ただし、反復中にリストを変更する場合は、CopyOnWriteArrayListを使用する必要があります。
ArrayListはVectorよりも高速で、同期のためにオーバーロードされることはありません。
コレクションユーティリティクラスを使用して同期リストと読み取り専用リストを簡単に取得できるため、ArrayListはより用途が広いです。
28. ArrayとArrayListの違いは何ですか?
1. ArrayListはオブジェクトのみを保持できるのに対し、Arrayは基本的なタイプとオブジェクトを保持できます。
2.配列は指定サイズで、ArrayListのサイズは固定です。
3. 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インターフェースを実装し、要素の追加、要素の置換、前の要素と次の要素のインデックスの取得などの他の関数を含みます。
- コレクションを変更できないようにする方法は?
unmodifiableXxxツールの静的メソッドのコレクション変数セットをカプセル化します。
コレクションの静的メソッドを通じて emptyXxxは空の不変コレクションを返します。
コレクション静的メソッドを通じて、 singletonXxxは特定のオブジェクトを含む不変のコレクションを返します。