Javaにおける集約クラスにおけるList,Map,Setの違い
:
List:1.重複するオブジェクトを許可できます.
2. null 。
3. , , 。
4. ArrayList、LinkedList Vector。ArrayList , , LinkedList List 。
Set:1.
2. , ,TreeSet Comparator Comparable 。
3. null
4.Set HashSet、LinkedHashSet TreeSet。 HashMap HashSet;TreeSet SortedSet , TreeSet compare() compareTo() 。
Map:
1.Map collection 。Map 。
2.Map Entry , ,Map 。
3. TreeMap Comparator Comparable 。
4. Map null null 。
5.Map HashMap、LinkedHashMap、Hashtable TreeMap。(HashMap、TreeMap )
:
Collection
:
List:
Listは秩序化されたCollectionであり、このインタフェースを使用して各要素が挿入される位置を正確に制御することができる.ユーザは、Javaの配列と同様に、リスト内の要素にアクセスするためにインデックス(リスト内の要素の位置)を使用することができる.
ListのVector:
配列(Array)ベースのリストは、配列に備わっていない機能をカプセル化して使いやすいため、配列の制限を回避しやすく、性能も配列を超えることはできません.だから、可能な場合、配列を多く運用します.また重要な点は、Vectorがスレッド同期(sychronized)であり、これもVectorとArrayListの重要な違いである.
ListのArrayList:
Vectorと同様に配列ベースのチェーンテーブルであるが,異なるのはArrayListが同期していないことである.したがって、パフォーマンスはVectorよりも優れていますが、マルチスレッド環境で実行する場合は、スレッドの同期の問題を自分で管理する必要があります.
ListのLinkedList:
LinkedListは前の2つのListとは異なり、配列ベースではないので、配列性能に制限されません.
各ノード(ノード)には、次の2つの側面があります.
1.ノード自体のデータ(data);
2.次のノードの情報(nextNode).
したがってLinkedListを追加して削除すると,配列ベースのArrayListのように大量のデータ移動が必要となる.nextNodeの関連情報を変更すれば実現できるのがLinkedListのメリットです.
Listまとめ:
すべてのリストには、KeyValueキー値ペアではなく、単一の異なるタイプのオブジェクトからなるテーブルしか収容できません.
すべてのリストに同じ要素があります
すべてのリストにnull要素を含めることができます
ArrayベースのList(Vector,ArrayList)はクエリーに適し、LinkedListは追加、削除操作に適しています
Set:
Setは重複する要素を含まない無秩序Collectionである.
SetのHashSet:
SetとListは共にCollectionインタフェースを実装しているが,実装方式は異なる.Listは基本的にArrayベースです.しかし、SetはHashMapに基づいて実現され、これがSetとListの根本的な違いである.HashSetの格納方式は,HashMap中のKeyをSetの対応する格納項目とする.これもSetでリストのように重複する項目ができない根本的な原因であり,HashMapのkeyは重複できないからである.
SetのLinkedHashSet:
HashSetのサブクラス、チェーンテーブル.
TreeSet:
SortedSetのサブクラスは、HashSetとは根本的にTreeSetが秩序化されているわけではありません.それはSortedMapによって実現された.
Setまとめ:
Set実装の基礎はMap(HashMap)である
Setの要素は重複できません.add(Object obj)メソッドを使用して既存のオブジェクトを追加すると、前のオブジェクトが上書きされます.
Map:
Mapはキーオブジェクトと値オブジェクトを関連付けるコンテナであり、1つの値オブジェクトはMapであり、順次類推され、マルチレベルマッピングを形成することができる.キーオブジェクトの場合、Setのように、1つのMapコンテナ内のキーオブジェクトは、検索結果の一貫性を維持するために重複することを許さない.2つのキーオブジェクトが同じであれば、そのキーオブジェクトに対応する値オブジェクトを取得したい場合に問題があります.あなたが得たのはあなたが考えている値オブジェクトではなく、結果的に混乱する可能性があります.したがって、キーの一意性は重要であり、集合の性質にも合致します.もちろん、使用中に、あるキーに対応する値オブジェクトが変化する可能性があります.この場合、最後に変更した値オブジェクトがキーに対応します.値オブジェクトに一意性の要件はありません.任意の複数のキーを1つの値オブジェクトにマッピングできます.これは問題ありません(ただし、使用すると不便になる可能性があります.そのキーに対応する値オブジェクトが得られるかどうか分かりません).
Mapには、HashMapとTreeMapの2つの比較的一般的な実装があります.
HashMapもハッシュコードのアルゴリズムを使用して、キーをすばやく検索します.
TreeMapはキーを順番に格納するため、firstKey()、lastKey()など、拡張方法があります.TreeMapからサブMapを取得するための範囲を指定することもできます.
キーと値の関連付けは簡単で、put(Object key,Object value)メソッドで値オブジェクトにキーを関連付けることができます.get(Object key)で、このkeyオブジェクトに対応する値オブジェクトを得ることができます.