Java コンテナに関するよくある面接の質問

(*-*)浩
リリース: 2019-12-18 15:17:34
オリジナル
2224 人が閲覧しました

Java コンテナに関するよくある面接の質問

#Java コンテナとは何ですか? (推奨される学習: Java よく見るテスト問題 )

Java コンテナに関するよくある面接の質問

# との違いは何ですか?

java.util.Collection は、コレクション インターフェイス (コレクション クラスの最上位インターフェイス) です。これは、コレクション オブジェクトに対する基本的な操作のための共通のインターフェイス メソッドを提供します。 Collection インターフェイスには、Java クラス ライブラリに多くの特定の実装があります。

Collection インターフェイスの重要性は、さまざまな特定のコレクションに対して最大化された統一された操作方法を提供することであり、その直接継承インターフェイスには List および Set が含まれます。

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

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

Java コンテナに関するよくある面接の質問

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

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

HashTable は同期ですが、HashMap は非同期であり、hashTable よりも効率的です。

HashMap では空のキー値が許可されますが、hashTable では許可されません。

HashMap と TreeMap のどちらを使用するかを決めるにはどうすればよいですか?

HashMap は、Map での要素の挿入、削除、配置などの操作に最適です。ただし、順序付けられたキーのコレクションを反復処理する必要がある場合は、TreeMap の方が適しています。コレクションのサイズによっては、順序付けされたキーの走査のために HashMap に要素を追加し、そのマップを TreeMap に置き換えた方が高速な場合があります。

HashMap の実装原理について教えてください。

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

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

要素をハッシュマップに入れるときは、まずキーのハッシュコードに基づいてハッシュ値を再計算し、ハッシュ値に基づいて配列内の要素の位置 (添え字) を取得します。配列はすでにその位置に格納されています。他の要素が追加された場合、この位置の要素はリンクされたリストの形式で格納され、新しく追加された要素がチェーンの先頭に配置され、最初に追加された要素がチェーンの先頭に配置されます。チェーンの終端。配列内のこの位置に要素がない場合、要素はリンクされたリストの配列内のその位置に直接配置されます。

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

へ、HashSet の実装原理について話しますか?

HashSet の最下層は HashMap で実装されます

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

HashMap の値は PRESENT# で統一されます

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

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

配列とリストの間で変換するにはどうすればよいですか?

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

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

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

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

ArrayList は Vector より高速で、同期によりオーバーロードされません。

ArrayList は、コレクション ツール クラスを使用して同期リストと読み取り専用リストを簡単に取得できるため、より汎用性が高くなります。

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

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

Array はサイズを指定した後は不変ですが、ArrayList のサイズは可変です。

Array は、addAll、removeAll、iterator などの ArrayList ほど多くの関数を提供しません。

Queue の Paul() と Remove() の違いは何ですか?

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

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

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

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

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

enumeration: 列挙型、イテレータと同等。

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

イテレータは、開発者がシーケンスの基礎となる構造を知らなくても、シーケンス内を走査して選択できるオブジェクトであるデザイン パターンです。イテレータは、安価に作成できるため、「軽量」オブジェクトと呼ばれることがよくあります。

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

Java の Iterator 関数は比較的単純で、一方向にのみ移動できます。

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

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

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

(4) 反復子によって新たに返された要素を削除するには、remove() を使用します。

Iterator は Java イテレータの最も単純な実装です。List 用に設計された ListIterator にはさらに多くの機能があります。List を双方向に走査でき、List から要素を挿入したり削除したりすることもできます。

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

Iterator は Set コレクションと List コレクションを走査するために使用できますが、ListIterator は List を走査するためにのみ使用できます。

Iterator はコレクションを前方にのみトラバースできますが、ListIterator は前方と後方の両方にトラバースできます。

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

以上がJava コンテナに関するよくある面接の質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!