Java コレクションは、Set、List、Queue、Map の 4 つのシステムに大別されます。
Set は順序付けされていない反復可能なコレクションを表し、List は順序付けされた反復可能なコレクションを表します。キューを達成します。
コレクションは配列とは異なり、配列要素は基本的な型の値またはオブジェクトのいずれかになります (実際には、オブジェクトの参照変数のみを保存します)。
Javaコレクションには2つの派生インターフェースがあります: CollectionとMap
Collectionコレクションシステムの継承ツリー:
Mapコレクションシステムの継承ツリー:
以下は
Setについて説明します:
Set は jar に似ています。プログラムは複数のオブジェクトを順番に「スロー」できます。Set は要素が追加される順序を記憶しません。また、Set は同じ要素を許可しません。
HashSet:
特徴:
要素の配置順序は保証されません
HashSetは同期されません
設定された要素の値はnullになる可能性があります
HashSetが2つの要素の等しいかどうかを判断する基準は次のとおりです: 2つのオブジェクトは次の方法で比較されますequals() メソッドは等しく、2 つのオブジェクトの hashcode() メソッドの戻り値も等しい。
注: オブジェクトを HashSet に入れるときに、オブジェクトの equals() メソッドをオーバーライドする必要がある場合は、その hashCode() メソッドをオーバーライドする必要があります。ルールは次のとおりです。2 つのオブジェクトが比較され、equals() メソッドを通じて true が返された場合、2 つのオブジェクトの hashCode 値は同じである必要があります。
LinkedSet:
LinkedSet は、元の hashCode 値に基づいて要素の保存場所を決定しますが、要素の挿入順序が維持されるように、リンクされたリストを使用して要素の順序を維持します。 LinkedSet は、追加された順序でセット内の要素にアクセスします。
LinkedSetは要素の挿入位置を維持する必要があるため、HashSetよりも若干パフォーマンスが低くなります。
TreeSet:
TreeSet は、コレクション要素がソートされた状態であることを保証します。
TreeSet は要素の挿入順序に従って並べ替えられるのではなく、要素の実際の値に従って並べ替えられます。
TreeSet は、赤黒ツリー データ構造を使用してセット要素を保存します。
TreeSet は、自然な並べ替えとカスタマイズされた並べ替えの 2 つの並べ替え方法をサポートしています。デフォルトでは、TreeSet は自然な順序付けを使用します。
自然な並べ替え: TreeSet は、コレクション要素の CompareTo (Object obj) メソッドを呼び出して要素間のサイズ関係を比較し、コレクション要素を昇順に並べます。デフォルトでは、TreeSet は自然な順序付けを使用します。
オブジェクトが TreeSet コレクションに追加されると、TreeSet はオブジェクトの CompareTo (Object obj) メソッドを呼び出してコンテナ内の他のオブジェクトとサイズを比較し、赤黒ツリー構造に従ってその格納場所を見つけます。
2 つのオブジェクトが等しいかどうかを判断する唯一の基準は、 CompareTo (Object obj) メソッドを通じて 2 つのオブジェクトが 0 を返すかどうかです。
equals() メソッドを使用して 2 つのオブジェクトを比較すると true が返される場合、compareTo (Object obj) メソッドを使用して 2 つのオブジェクトを比較すると 0 が返されるはずです。
カスタマイズされた並べ替え: カスタマイズされた並べ替えを実装する必要がある場合は、TreeSet コレクション オブジェクトを作成するときに、TreeSet コレクションに関連付けられた Comparator オブジェクトを提供する必要があります。Comparator オブジェクトは、コレクション要素の並べ替えロジックを担当します。
EnumSet:
EnumSet の set 要素も順序付けされます。EnumSet は、Enum クラス内の列挙値の配置順序に基づいて set 要素の順序を決定します。
EnumSet は内部的にビット ベクトルの形式で保存されます。
EnumSet コレクションでは、null 要素の追加は許可されません。
各 Set 実装クラスのパフォーマンス分析:
TreeSet はセットの順序を維持するために追加の赤黒ツリー アルゴリズムを必要とするため、HashSet のパフォーマンスは常に TreeSet より優れています。
LinkedSet 通常の挿入および削除操作の場合、LinkedSet は HashSet よりもわずかに遅くなります。これは、リンクされたリストを維持することによって発生する追加のオーバーヘッドが原因です。ただし、リンク リストがあるため、LinkedSet の走査は高速になります。
EnumSet は最高のパフォーマンスを持っていますが、セット要素として同じ列挙クラスの列挙値しか保存できません。
List:
List は、順序付けされた反復可能な要素の組み合わせを表します。セット内の各要素には、対応する順次インデックスがあります。
List コレクションは位置インデックスに基づいてコレクション内の要素にアクセスできるため、for ループを使用して List を走査できます。
ArrayList、LinkedList、Vector
ArrayListソースコード解析:
LinkedListソースコード解析:
Queue:
Queueはキューのデータ構造をシミュレートするために使用されます。
PriorityQueue:
PriorityQueue は、キュー要素を結合順ではなく、キュー要素のサイズに応じた順序で保存します。
PriorityQueue では null 要素の挿入は許可されません。
Deque:
Deque インターフェースは Queue インターフェースのサブインターフェースであり、両端キューを表します。
プログラム内で「スタック」のようなデータ構造を使用する必要がある場合は、ArrayDequeを使用することをお勧めします。
さまざまな線形テーブルのパフォーマンス分析:
1. ArrayList および Vector コレクションの List コレクション要素を走査する必要がある場合、パフォーマンスが向上するように、ランダム アクセス メソッド (get) を使用してコレクション要素を走査する必要があります。 ; LinkedList コレクションの場合は、コレクション要素を走査するために Iterator を使用する必要があります。
2. 頻繁に挿入と削除を行う必要がある場合は、LinkedList を使用する必要があります。
3. 複数のスレッドが List コレクション内の要素に同時にアクセスする場合は、コレクションをスレッドセーフなコレクションにラップするためにコレクションを使用する必要があります。
Map:
Map キーは繰り返すことができません。つまり、同じ Map オブジェクトの 2 つのキーは、equals メソッドと比較すると常に false を返します。
Map には keySet() メソッドがあり、Map 内のすべてのキーで構成される Set を返すために使用されます。
HashMap、Hashtable:
HashMapとHashtableの違い:
1. HashtableはスレッドセーフなMapですが、HashMapは非スレッドセーフであるため、HashMapのパフォーマンスが優れています。
2.Hashtable ではキーと値として null を使用できませんが、HashMap ではキーまたは値として null を使用できます。
Hashtable と HashMap の 2 つのキーが等しいかどうかを判断する基準は、2 つのキーの equals() メソッドが true を返し、2 つのキーの HashCode 値が同じであることです。 2つの値は同じ値のequals()メソッドの戻り値です。
LinkedMap:
LinkedMap は、キーと値が追加される順序を記憶します。
TreeMap:
TreeMap も赤と黒のツリー構造を使用します。TreeMap 内の 2 つのキーの同等性を判断するための基準は次のとおりです:
CompareTo() メソッドによる 2 つのキーの戻り値は 0 です。(自然な並べ替えの下)。 )
CompareTo() メソッドによる 2 つのキーの戻り値は 0 です。同時に、equals() メソッドは true を返します。 (カスタムソート中)。
EnumMap:
EnumMap は内部的に配列の形式で保存されます。
EnumMap はキーとして null を許可しませんが、値を null にすることは許可します。
マップのパフォーマンス分析:
HashMap のパフォーマンスは Hashtable のパフォーマンスよりも優れています。
TreeMap 内のキーと値のペアは常に正しい順序であり、特別な並べ替え操作は必要ありません。
一般的なアプリケーション シナリオでは、HashMap の使用を検討してください。
LinkedMap は、キーと値の追加の順序を維持するためにリンクされたリストを維持する必要があるため、HashMap よりも遅くなります。
EnumMap は最高のパフォーマンスを持っていますが、同じ列挙クラスの列挙値のみをキーとして使用できます。
関連する推奨事項:
Java の Set、List、および Map のトラバーサル メソッド
Java での List、Set コレクション、および Map の使用法を理解するためのコード
以上がJavaコレクション:Set、List、Queue、Mapの4つのシステムの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。