ホームページ  >  記事  >  Java  >  Java コレクション フレームワークの学習メモ

Java コレクション フレームワークの学習メモ

PHPz
PHPzオリジナル
2017-04-04 10:36:581633ブラウズ

Java コレクション クラスは、さまざまな数の複数のオブジェクトを格納するために使用でき、スタックやキューなどの一般的なデータ構造を実装できます。配列とは異なり、配列の長さは不変です。配列要素は基本型とオブジェクト型を格納できますが、コレクションはオブジェクト (本質的にはオブジェクトの 参照変数) のみを格納できます。 List、および Map。ここで、Set は順序付けされていない反復不可能なセットを表し、List は順序付けされた反復可能なセットを表し、Map はマッピング関係を持つコレクションを表します。マップ内の key は一意であり、値は次のとおりです。再現可能。このうち、Java5 以降に新たに追加された Set、List、および Queue キューは、Collection から派生したサブインターフェイスです。Set コレクションには、コレクション内のオブジェクト間に明確な順序がありません。 LinkedHashSet、TreeSet、はい SetHashSet のメイン実装クラスは、HashSet コレクション要素が

null

であることを許可しません。 hashCode 値は、hashCode 値に基づいて HashSet 内のオブジェクトの格納場所を決定します。 HashSet では、equals() メソッドと hashCode() メソッドの戻り値を比較することで、2 つのオブジェクトが等しいかどうかを判断します。

LinkedHashSet は HashSet のサブクラスですが、順序を維持するためにリンクされたリストも使用します。要素の挿入順序を維持する必要があるため、HashSet よりもパフォーマンスが若干低くなります。同じ要素を並べることはできません。同様に、TreeSet はコレクション要素がソートされた状態であることを確認して、サイズを比較するためにコレクション要素の comparTo (Object obj) メソッドを呼び出します。要素間の関係を確認し、コレクション要素を昇順に並べ替えます。つまり、自然な並べ替えです。 TreeSet は、Comparator インターフェイスを介してカスタマイズされた並べ替えを実装することもできます。TreeSet コレクション オブジェクトを作成する場合、TreeSet コレクションに関連付けられる Comparator オブジェクトが提供され、Comparator オブジェクトはコレクション要素の並べ替えロジックを担当します。

さまざまな Set パフォーマンスの比較

TreeSet はセット要素の順序を維持するために追加のアルゴリズムを必要とするため、HashSet のパフォーマンスは常に TreeSet より優れています。TreeSet は、ソートされたセットを維持する必要がある場合にのみ使用する必要があります。それ以外の場合は、HashSet を使用する必要があります。利用される。さらに、LinkedHashSet は HashSet のサブクラスであり、通常の挿入および削除操作に対応します。ただし、LinkedHashSet のパフォーマンスは、リンク リストの維持によって発生するオーバーヘッドのためです。 、LinkedHashSet をトラバースするときは高速になります。ただし、set の 3 つの実装クラスはどれもスレッドセーフではありません。通常は、Collections ツール クラスの synchr
onizedSortedSet メソッドを使用して、set コレクションをラップすることができます。たとえば、次のようにします。 code>SortedSet s = Collections.synchronizedSortedSet(new

TreeSet(...));

List コレクションは、順序付けされた反復可能なコレクションを表します。コレクション内の要素には、対応する index

ArrayList と Vector の 2 つの典型的な実装があり、LinkedList

The ArrayList もあります。 Vector クラスは、再割り当てを可能にする動的 Object[] 配列をカプセル化します。追加された要素の数が配列の長さを超えると、初期の長さは自動的に増加します。 ArrayList と Vector の大きな違いは、ArrayList はスレッド セーフではないのに対し、Vector はスレッド セーフであり、コレクションの同期を確保するためのプログラムを必要としないことです。 Vector はスレッドセーフであるため、Vector カラーのパフォーマンスは ArrayList よりも低くなります。スレッド セーフを確保する必要がある場合でも、一般に Vector を使用することは推奨されません。代わりに、Collections ツール クラスの関連メソッドを使用して、ArrayList をスレッド セーフ クラスにラップします。
Vector には、スタックのデータ構造をシミュレートするために使用される Stack というサブクラスもあります。継承 の関係により、Stack はスレッドセーフであるため、パフォーマンスは比較的低くなります。スタックのデータ構造に使用する必要がある場合は、LinkedList を使用することを検討してください。これは、リンクされたリストに基づいたリストです。特に、要素の挿入と削除は非常に高速です。 LinkedList List インターフェイスと Deque インターフェイスの両方が実装されているため、スタックとして使用できます。 Queue コレクションは、先入れ後出しのキューのデータ構造をシミュレートするために使用されます。 Deque は、両端のキューを表す Queue のサブインターフェイスであり、キューの要素を両端から操作できるようにします。

LinkedList と ArrayList の違い
ArrayList はコレクション内の要素を配列の形式で内部的に格納するため、コレクション要素にランダムにアクセスする際のパフォーマンスが向上しますが、LinkedList はコレクションの要素を次の形式で格納します。リンクされたリストなので、ランダムアクセスのパフォーマンスは劣りますが、要素の挿入と削除のパフォーマンスは優れています。

Map は、マッピング関係を持つデータを保存するために使用されます。キーと値はどちらも任意の参照型データにすることができますが、マップのキー値は一意であり、

HashMap と Hashtable は Map の 2 つの実装クラスです。
Hashtable はスレッドセーフな Map 実装クラスですが、HashMap はスレッドセーフではないため、HashMap のパフォーマンスがわずかに優れています。

さらに、Hashtable では null をキーと値として使用することはできません。Hashtable に null を入力しようとすると、null ポインター例外が発生しますが、HashMap ではキーと値を繰り返すことができないため、HashMap には null のみを使用できます。 1 つのキーは null ですが、null の値が複数存在する可能性があります。
HashMap と Hashtable の 2 つのキーが等しいかどうかを判断する基準は、equals() メソッドと hashCode() メソッドによる 2 つのキーの戻り値が等しいことです。
LinkedHashMap は HashMap のサブクラスでもあり、LinkedHashMap はキーの順序を維持するために二重リンク リストを使用します。つまり、反復順序は挿入順序と一致します。要素の挿入順序を維持する必要があるため、全体的なパフォーマンスは HashMap よりもわずかに低くなります。

TreeMap
Map には SortedMap インターフェイスもあります。SortedMap インターフェイスは、TreeMap がキーと値のペアを保存するときに、キーに従ってノードを並べ替える必要があります。自然な並べ替えでは、キー Comparable インターフェイスを実装する必要があります。スケジュールされた並べ替えでは、TreeMap の作成時に Comparator オブジェクトを渡す必要があります。このオブジェクトは TreeMap 内のキーを並べ替えます。ツリーセットに似ています。 TreeMap は順序を維持する必要があるため、HashMap や Hashtable よりも遅くなります。

コレクションとコレクションの違い

コレクションはJavaのコレクション

フレームワークのインターフェースですコレクションはコレクションフレームワークのツールクラスであり、コレクション要素の並べ替え、
クエリ、変更などを行うための多数のメソッドを提供しますオペレーションでは、コレクション オブジェクトを不変に設定し、オブジェクト コレクションに同期制御を実装するためのメソッドも提供します。

以上がJava コレクション フレームワークの学習メモの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。