1、Javaのブランチのコレクション、トップレベルのインタフェース
リスト、セット、地図インタフェースがあり、最初の二つは、Collectionインタフェースを継承するために、地図は、独立したインタフェースであり、
そこのHashSet、LinkedHashSetの、TreeSetのセットの下で
そこArrayListに、ベクトル、リストの下のLinkedList
地図下有Hashtableの、のLinkedHashMap、HashMapの、TreeMapの
Collectionインタフェースの下にキュー・インターフェースがあり、クラスが優先度つきキューを持っています
注意:
キュー・インターフェース・リストを、同じレベルを設定し、それらがCollectionインタフェースを継承しています。
あなたは見つけるでしょう。図は、LinkedListのは、キューのインターフェイスを実装するか、Listインタフェースを実現することができます。しかし、それは、LinkedListのは、キューのインターフェイスを実装しています。(キュー、キューアクセス方式のみ完全インターフェースによって定義することができるが、直接のLinkedListの非キューメソッドにアクセスすることができない場合、メソッド、すなわちパラメータの型)LinkedListのメソッドへのアクセスを狭くキューインタフェース、ようにのみ、適切な方法を使用することができます。
たSortedSetは内部インタフェースである(これだけTreeSetの実装が利用可能である)の要素は、順序付けされなければなりません。
要約:
接続インタフェース:
- 再現性、秩序一覧
- 配列リスト
長所:基礎となるデータ構造は、配列、クエリ速い、遅いの追加です。
欠点:スレッドセーフな、高効率
- ベクター
長所:基礎となるデータ構造は、配列、クエリ速い、遅いの追加です。
欠点:スレッドセーフ、効率が低いです
- LinkedListの
長所:基礎となるデータ構造は、リンクリスト、クエリが遅い、速い欠失です。
欠点:スレッドセーフな、高効率
- 障害のセットのみ
- HashSetの
基礎となるデータ構造は、ハッシュテーブルです。(順不同のみ)
どのように要素の一意性を確保するには?
1.二つの方法に依存している:のhashCode()とequals()
- LinkedHashSetの
基礎となるデータ構造は、リンクリストやハッシュテーブルです。(FIFOのみ、挿入を注文)
を保証するための要素の順序付けられたリストによって1
のみの要素を確実にするためにハッシュテーブルにより2.
- TreeSetの
基礎となるデータ構造は赤黒木です。(のみ注文)
1.ソートそれを確保する方法の要素?
自然な順序
コンパレータ並べ替え
要素の一意性を確保する方法2.?
戻り値の比較に基づいて決定することは0であります
それを使用する最後に私たちのためのコレクションのコレクション?(マスター)
唯一の右?
です:セット
それをソート?
TreeSetのかLinkedHashSetの:彼らは
HashSetの:いいえ
、あなたが設定を知っていれば、しかし、HashSetのを使用するために、どの設定を知りません。
いいえ:一覧ありません
保護するには?
です:ベクトル
番号:ArrayListのか、LinkedListのマルチクエリ:ArrayListの
追加やより:LinkedListの
あなたは、リストを知っているが、ArrayListのを使用するリスト、わからない場合。
あなたがコレクションのコレクションを知っているが、使用するのか分からない場合は、ArrayListのを使用しています。
あなたは、コレクションを知っている場合は、ArrayListのを使用しています。
単に地図を見て、コレクションを持ちます。
Mapインタフェース:
Mapインタフェースは、3つの重要なカテゴリー、すなわちHashMapの、TreeMapのとハッシュテーブルを実現するために持っています。
- TreeMapのが発注され、HashMapのハッシュテーブルは順不同です。
- Hashtableのメソッドは同期化され、メソッドのHashMapが同期されません。これは、二つの主な違いです。
これが意味します。
- ハッシュテーブルは、スレッドセーフである、HashMapのは、スレッドセーフではありません。
- HashMapの高効率、低Hashtableの効率。
レガシーコードまたは推奨のHashMapとの互換性のために無同期要件の場合。ハッシュテーブルは、ソースコードはHashMapのソースコードはないがハッシュテーブルのすべてのパブリックメソッドを宣言は、キーワードを同期化され、コンストラクターに加えて、見ることができる表示します。
- ハッシュテーブルがnull値を許可しない、ハッシュマップはnull値(キーと値が許可される)ことができ
- 別の親:Hashtableの親は、HashMapの親がAbstractMapの辞書です
これは重要な問題に焦点を当てています。
(A).TreeSet、LinkedHashSetのとのHashSetの差
1.はじめに
-
TreeSetの、LinkedHashSetのとHashSetのは、セットのJavaデータ構造で実現されています
-
- TreeSetのをソートするための主な機能
- FIFO(先入れ先出し)の順序集合を確実にするために使用されるLinkedHashSetの主な機能
- HashSetの唯一の共通の記憶データの収集
2.同じポイント
- 重複要素:3が重複要素を含んでいないので、3つのすべては、Setインタフェースを達成するためにため
- スレッドの安全性:あなたがスレッドセーフできCollections.synchronizedSetを(使用したい場合は3は、スレッドセーフではありません)
3.異なる点
- パフォーマンスとスピード:LinkHashSet続い最速HashSetの挿入データは、最も遅いが、内部ソートTreeSetのために達成され、
- 注文:HashSetのは整然とした、LinkHashSet確保挿入FIFO順はすなわち、内部TreeSetの仕分け設備を実装、また、カスタム照合することができソート保証するものではありません。
- ヌル:HashSetのとLinkHashSetナルデータを許しますが、TreeSetの挿入NullPointerExceptionがnullのデータを報告します
参考:https://blog.csdn.net/zhangqunshuai/article/details/80660974