コレクションフレームワーク(Javaインタビューの質問)

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

1つは配列を使用し、もう1つは二重循環リンクリスト、配列の特性、リンクリストの特性を使用します

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

スレッドセーフとスレッドアンセーフ

3. HashMapとHashTableの違いは何ですか?

スレッドセーフとスレッドアンセーフ

4. HashMapとHashSetの違いは何ですか?

HashSetの基本的な実装は、HashMapを使用することです。これは、HashMapのすべての特性をほとんど継承します。

5. HashTableとConcurrentHashMapの違いは何ですか?

HashTableはスレッドセーフですが、効率は非常に低いため、複数のHashtableに分割されたセグメント化されたロックメカニズムを内部で使用するConcurrentHashMapが発明され、複数のHashtable間のロックは共有されないため、効率が向上します

6.収集フレームワークの分類?

コレクションフレームワークには2つのトップレベルの交差があります。1つはMapインターフェースで、もう1つはCollectionインターフェースです。Mapインターフェースでの主な実装クラスは、HashMap、HashTable、
ConcurrentHashMap、およびPropertiesです(TreeMapもあります)
。 ArrayList、Voctor、LinkedListなど(Stack)、HashSetなど、Setインターフェース(TreeSet、
TreeHashSet)

7. HashMapのputメソッドのフローは何ですか?

まず、キーが空かどうかを判断します。それがnullの場合は、配列の最初の位置に直接挿入します。それがnullでない場合は、ハッシュ値を計算します。ハッシュ値
を使用してインデックス配列のインデックス位置を計算する場合は、forループでequalsを使用します。下付き文字の位置にあるリンクリストに同じキーがある
かどうかを確認するには、存在する場合は、元の値をカバーするように戻ります。存在しない場合は、まず展開が必要かどうかを判断し、次にヘッド挿入メソッドを使用してリンクリストの最初の位置に保存します。(ハッシュアルゴリズムは理解しすぎず、
ハッシュの衝突減らすだけです

8. HashMapのgetメソッドのフローは何ですか?

キーのハッシュ値を計算し、ハッシュ値を使用して配列の添え字の位置を計算します。配列の添え字の位置にEntryオブジェクトがない場合は、nullを返します。存在する場合は、リンクリストを走査して、
equalsを使用して決定します。

9. HashMapの拡張プロセス?拡張が2の累乗である理由

ハッシュ値を介してインデックスを計算する場合、ハッシュ値と配列の長さ-1を使用してインデックスを計算するため、均一な分布を確保するには、
バイナリに変換さた配列の添字-1を1にして、データを作成できるようにする必要があります。アレイに均等に分散

10. HashMapマルチスレッドの場合の無限ループの拡張

HashMapはスレッドに対して安全ではありません。マルチスレッドの場合、複数のスレッドが同時に配列を拡張します。次のポインタを変更する1行のコードがAからB、
BからAになり、走査中に無限ループの問題が発生します。 jdk1.8でヘッド補間の代わりにテール補間を使用すると、この問題が解決します

11. HashMap1.7と1.8の違いは何ですか?

HashMap 1.7は、配列とリンクリストのデータ構造を使用してデータを格納します。1.8では、配列とリンクリストのデータ構造と赤と黒のツリーを使用してデータを格納します。1.8では
、ヘッド補間法の代わりにテール補間法を使用して、1.7の拡張展開ループを解決します。問題です。(ノード、ハッシュアルゴリズムなど)

12.なぜ1.8で赤と黒の木を追加する必要があるのですか?

極端な場合、リンクリストは無限に拡張され、リンクリストのクエリ効率は比較的低く、時間の複雑さはO(N)であり、赤黒ツリーの時間の複雑さはO(logn)であり、クエリ効率は
比較的高いですが、直接使用しないでください。赤黒木ですが、リンクリスト+赤黒ツリーを使用してください。これは、リンクリストの長さが8未満の場合、リンクリストと赤黒ツリーのクエリ効率は
類似しており、リンクリストの長さが8より大きい場合、挿入効率リンクリストは赤黒ツリーよりもはるかに大きいためです。 、赤黒木クエリの使用効率はリンクリストよりも大きく
リンクリストの長さが8より大きい確率は非常に低いため、赤黒ツリーの挿入効率も非常に高く、リンクリスト+赤黒ツリーの構造は赤黒の使用よりも優れています。木の効率が上がる

13.ハッシュマップのリンクリストを赤と黒にする必要があるのはなぜですか?利点は何ですか?

(1)パフォーマンスを向上させる、赤黒木のクエリ効率はリンクリストのクエリ効率よりも高い
(2)バイナリ検索ツリーを使用しない理由は、極端な場合にバイナリ検索ツリーがリンクリストに縮退するためです
(3)赤黒ツリーは、AVLと比較して完全なバランスを追求しませんローテーション数を減らすには
(4)赤黒ツリーを直接使用する場合、追加コストは比較的高く、リンクリストの長さが8未満の場合でもクエリの効率はそれほど悪くなりません。

14. HashMapでインデックス値を計算する方法は?

配列の添え字値は、ハッシュと配列の長さ-1ビット演算によって取得されます

15. 1.7と1.8のハッシュアルゴリズムの違いは何ですか?

16. HashCodeがある場合、なぜハッシュ値を再計算する必要があるのですか?

17. ConcurrentHashMapはスレッドの安全性をどのように保証しますか?

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

(1)コレクションは異なるタイプのデータを格納でき、配列は同じタイプのデータのみを格納できます
(2)コレクションはマッピング関係のあるデータを格納するために使用できます。配列はできません
(3)コレクションと長さは変更できます、配列の長さ固定
(4)コレクションはオブジェクトのみを格納でき、配列は基本タイプを格納できます

19.コレクションフレームワークにはどのような種類がありますか?

(1)Collectionインターフェースのサブインターフェースには、SetインターフェースとListインターフェースが含まれます。
(2)Setインターフェースの実装クラスは、HashSet、TreeSet、LinkedHashSetなどです。
(3)Listインターフェースの実装クラスは、ArrayList、LinkedList、Stack、Vectorです。など
のHashMap、TreeMapを、ハッシュテーブル、ConcurrentHashMapのプロパティのように:(4)Mapインタフェースの実装クラスは、主に

20.赤と黒の木のルール

21. HashMap 16の初期容量はなぜですか?

22.リストがコレクションをトラバースする3つの方法は?

(1)for
(2)foreach
(3)iterator
Iterator it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}

23.コレクションとコレクションの違いは何ですか?コレクションの一般的な方法は何ですか

コレクション:コレクションクラスの祖先クラス
コレクション:コレクションクラスのヘルパークラスは、さまざまなコレクションで検索、並べ替え、スレッドセーフ、およびその他の操作を実装する一連の静的メソッドを提供します

元の記事を51件公開しました Likes2 訪問1852

おすすめ

転載: blog.csdn.net/qq_42972645/article/details/105657368