リスト、セット、マップとの違いを説明

、リストインタフェース

コレクションリストはリストの集合であるインタフェースから継承されます。リストがキューを発注している、リストの各要素にはインデックスがあり、最初の要素のインデックスは0、+ 1次の次の要素のインデックス値です。そして、リストの権限で繰り返される要素がある、異なる設定します。主にListインタフェースのコレクションの実装:ArrayListを、LinkedListは、ベクタ、スタック。

配列リスト

ArrayListには動的配列でなく、私たちの最も人気のあるコレクションです。それはルールにラインに任意の要素を可能にしても、ヌル。各ArrayListのは、初期容量があります。

private static final int DEFAULT_CAPACITY = 10;

コンテナの大型化でコンテナ要素でも増加します。同時に容器に各要素に増える容量をチェックし、とき拡張操作のための高速オーバーフロー。私たちが挿入されているどのように多くの要素をクリアするのであれば、それは時間と効率の廃棄物の過度な容量拡張と操作を避けるため、初期容量値を指定するのが最善の方法です。

サイズは、のisEmptyは、設定、イテレータ反復子と操作が一定時間で実行されています。タイムシェアリングの操作を修正するための操作を追加し、それは、n個の要素を追加する(それが固定されたタイムシェアリングのオーバーヘッドをもたらす要素を追加することと同じくらい簡単ではありませんので、拡大を検討することにより)O(n)の時間を必要としています。

ランダムアクセスでのArrayList良いです。一方、非同期のArrayListに。

LinkedListの

LinkedListのは、二重にリンクされたリストであるのに対し、異なるLinkedListのはArrayListのリストとインタフェースを実装し、ArrayListには、ダイナミックアレイです。加えて、それはまた、さらにArrayListには、取得、削除、最初のLinkedListまたは尾方法を挿入提供される操作の基本的な方法を有します。

達成するためのさまざまな方法に、LinkedListのではなく、ランダムアクセスが、それはすべての操作は、二重リンクリストで実行することになっている必要があります。インデックスリストの操作で開始または終了(指定したインデックスに近い終わり、半分の時間を節約する)からリストを。これの利点は、低価格でリストの操作を挿入し、削除できることです。

ArrayListのように、LinkedListのは非同期です。複数のスレッドがリストにアクセスすると、彼らは自分のアクセスの同期を実装する必要があります。リスト構造のリストを作成するときに一つの解決策は同期です。

List list = Collections.synchronizedList(new LinkedList(…));

ベクター

そして同様のArrayListのが、ベクトルが同期されます。だから、ベクトルは、動的配列のスレッドセーフです。その動作は、ほとんどのArrayListと同じです。

スタック

スタックは、LIFOスタックを実装するために、ベクターから継承されました。5つの追加的なアプローチを提供し、スタックのベクトルをスタックとして使用することができます。プッシュと基本的な方法をポップは、Zhanding要素が覗く方法、スタックが空であるかどうかをテストするための空の方法であって、スタック内の要素の位置を検出するための検索方法が得られます。スタックした後、スタックは、作成したばかりの空です。

二、セット・インタフェース

セットは、セットが重複要素のコレクションが含まれていない、継承されたインタフェースCollectionです。これは、独自の内部秩序を維持するので、ランダムアクセスがどんな意味がありません。そして、リスト、それはまた、ヌルの存在を実行しますが、唯一の一人として。Setインタフェースの特殊な性質のために、すべての着信設定のコレクション要素は、APIの側面異なっている必要があります。コレクションAPIとまったく同じに設定してください。インターフェイスのセットを達成するために設定されています。HashSetの、TreeSetの、LinkedHashSetの、EnumSetの。

HashSetの

その内部には達成するためのハッシュコードであるため、HashSetのは、クエリの速度の最速のセットと呼ばれます。コレクションの要素はnullに、だけではnullにすることができます。その内の配列要素は、ハッシュ・コードによって決定されるので、セットの繰り返し順序を保証されていない;特に、それが配列の恒常性を保証するものではありません。

TreeSetの

TreeSetのバイナリツリーはTreeMapのに基づいて、実現され、常にSETでソートされた状態を生成する、内部的にはnull値に実装TreeMapのは許可されていません。要素をソートする要素の順序を使用することが自然である、または使用される構成方法に応じて、セットを作成するに設けられたコンパレータに従ってソート。

LinkedHashSetの

またLinkedHashSetのセットは、要素のハッシュコードの要素の値の格納位置に応じて決定されるが、それはまた、要素のリスト内の順序を維持するために使用されます。設定時間を横断するとき、このような挿入要素は節約するためにのように見えること、つまり、それは要素の集合の要素のLinkedHashSetのシーケンシャルアクセスを追加することになります。LinkedHashSetのときに設定のすべての要素への反復アクセス、パフォーマンスはHashSetのよりも良いですが、あなたはHashSetのにやや劣るパフォーマンスを挿入したとき。

三、地図インタフェース

地図とリストは、異なるインタフェースを設定し、それが値マッピングへの鍵を提供し、キーと値のペアのシリーズのコレクションです。地図では、キーと値の間の1対1の対応を保証します。すなわち、キーに対応する値であり、それは同じキー値を提示することができない、当然の値は同じ値であってもよいです。地図のコレクションは、達成した:HashMapの、ハッシュテーブル、TreeMapの、のWeakHashMapを。

HashMapの

ハッシュテーブルのデータ構造が、その位置は、それが内部ハッシュテーブルアレイ(エントリ[]テーブル)を定義し、高速クエリのために設計されたときにオブジェクトを見つけるためにハッシュ関数によって計算され、実装するために、変換素子は、ハッシュ関数を通過しますコンフリクトがある場合、インデックス付き配列に格納されたハッシュアドレスに変換素子、ハッシュリンクされたリストは、一本鎖構造であってもよいHashMap.Entryソースを見ることによって、一緒に同じハッシュアドレス文字列のすべての要素を形成するために使用されます。

ハッシュ表

また、競合解決と同じHashMapの中に実装ハッシュテーブルのデータ構造に基づいて、また、ハッシュリストの形態をとります。ハッシュテーブルは、Dictionaryクラスは、Mapインタフェースを実装して継承します。前記任意の辞書クラスは抽象親クラスに対応する値(例えば、ハッシュテーブルのような)キーにマッピングすることができます。各キーとそれぞれの値がオブジェクトです。任意Dictionaryオブジェクトに、各キーは、最大1つの値に関連付けられます。地図は「キーと値のキーと値のペア」のインターフェースです。ハッシュテーブルのテーブルをハッシュする「ジッパー」方法が、パフォーマンスは、HashMapのよりも低くなっています。

TreeMapの

SortedMapインタフェース、赤黒木によって、基礎となる実装を達成するために、ハッシュテーブルを命じました。

WeakHashMap

(降順で強度)のWeakHashMapを話をする前のJavaの参照を見てください

  1. 強力な引用:一般的な参照オブジェクトの宣言、そこGCません。
  2. ソフト引用:有用ではなく、必要に応じ、メモリオーバーフローが発生する前に、二次回復
  3. 弱参照:唯一の前に次のGCまで生き残ることができ、十分なメモリかどうか
  4. ファントム参照:このオブジェクトの唯一の目的は、通知を受信することができる場合GCシステム

弱い鍵ハッシュテーブルマップとベースの実装。キーは通常の使用ではなくなっているのWeakHashMap、で、そのエントリは自動的に削除されます。より正確には、キーを終了することが可能になり、キーを破棄するガベージコレクタをマッピングが存在することを妨げない特定のキーのため、終了し、その後回復しました。キーが破棄された場合、そのエントリが事実上マップから削除され、そのため、他のMap実装と行動のこの種は異なっています。ヌルヌル値とキーがサポートされています。そのようなHashMapのクラスは、同様の性能特性を有しており、性能パラメータは同じ初期容量と負荷係数を有します。ほとんどのコレクションと同様に、このクラスが同期されません。

IVの概要

1は、リスト、セットはCollectionインタフェースから継承され、地図ではありません

図2に示すように、リスト機能:要素は、注文した要素が繰り返されてもよい、セットの特長:ものの配列に要素が、一組の要素番号:要素のシーケンスにどの要素が繰り返されていない、要素が上書きされます(注、繰り返されます位置が決定要素ハッシュコードであり、位置は、実際には固定され、設定されたオブジェクトの追加のequals()メソッドは、ループの追加リストのサポート、すなわちインデックスを横断するように定義されなければならない、またはイテレータを使用するが、設定することができます彼は無秩序だったので、インデックスを使用して、所望の値を取得することができない、唯一の反復。) 

3、設定とリストの比較: 

セット:挿入や削除の要素は非効率的、高効率の取得、要素の挿入や削除は、位置の変化が発生することはありません。 

リスト:および同様の配列、それが位置変更の他の要素につながるので、リストは動的、要素効率の低挿入や削除、高効率の要素を見つけ、成長することができます。 

キーと値のペアを格納するのに適した4、地図データ

5、非スレッドセーフなコレクションクラスで、スレッドセーフなコレクションクラス:

  • LinkedListの、ArrayListに、HashSetの非スレッドセーフ、ベクターは、スレッドセーフです。
  • HashMapのは、ハッシュテーブルは、スレッドセーフである、スレッドセーフではありません。
  • StringBuilderはStringBufferのは、スレッドセーフで、スレッドセーフではありません。

参考リンク:Javaコンテナクラスの概要

       Javaの、リスト、セット、および地図の利用シナリオとその違いを説明

 

 

おすすめ

転載: www.cnblogs.com/jxxblogs/p/11561629.html