Javaコレクションは、一般的に使用されるデータ構造、コレクション、リンク、キュー、スタック、配列、マップなどを含むJavaが提供するツールキットです。Javaコレクションツールキットの場所はjava.util。*です。
Javaコレクションは、リストリスト、セットコレクション、マップマップ、ツールクラス(イテレーターイテレーター、列挙列挙クラス、配列、コレクション)の4つのパーツに分けることができます。
Javaコレクションツールキットフレームワークを以下に示します。
注:上のフレームワーク図を見ると、まずトランク、つまりコレクションとマップを把握します。
コレクションは、コレクションの基本的な操作とプロパティを含む非常に抽象的なコレクションであるインターフェイスです。
コレクションには、リストとセットの2つのブランチが含まれています。
(01)リストは順序付けられたキューであり、各要素にはインデックスがあります。最初の要素のインデックス値は0です。
リストの実装クラスには、LinkedList、ArrayList、Vector、Stackが含まれます。
(02)セットは、複製要素を許可しないコレクションです。
設定実装クラスには、HastsetとTreesetが含まれます。ハッシュセットはハッシュマップに依存しており、実際にはハッシュマップを介して実装されています。 TreesetはTreemapに依存しており、Treemapは実際にTreemapを通じて実装されています。
マップは、マッピングインターフェイス、つまりキー値のキー値ペアです。マップ内の各要素には、「キー」と「キーに対応する値」が含まれています。
AbstractMapは、マップインターフェイスのAPIのほとんどを実装する抽象クラスです。 Hashmap、Treemap、およびWeakHashmapはすべて、AbstractMapから継承されます。
ハッシュテーブルは辞書から継承しますが、マップインターフェイスを実装します。
次に、Iteratorを見てみましょう。これはコレクションを通過するためのツールです。つまり、通常、イテレーターのイテレータを介してコレクションを通過します。コレクションの実装クラスはIterator()関数を実装し、イテレーターオブジェクトを返す必要があるため、コレクションは反復因子に依存すると言います。
Listiteratorは、トラバースリストのために特異的に存在します。
列挙をもう一度見てみましょう。これは、JDK 1.0によって導入された抽象クラスです。 Iteratorのように、コレクションも横断しています。しかし、列挙の関数はIteratorよりも少ないです。上記のブロック図では、列挙はハッシュテーブル、ベクトル、スタックでのみ使用できます。
最後に、配列とコレクションを見てください。それらは、配列とコレクションを動作させる2つのツールクラスです。
上記の全体的なフレームワークを使用すると、各クラスを個別に分析します。
コレクションアーキテクチャ
以下に、コレクションを要約します。コレクションのいくつかのフレームワーククラスの関係図を見てみましょう。
コレクションはインターフェイスであり、その主な2つのブランチはリストとセットです。
リストとセットはインターフェイスであり、コレクションから継承します。リストは順序付けられたキューであり、リストに繰り返される要素があります。セットは数学的概念のコレクションであり、セットには繰り返し要素はありません!
リストとセットには、独自の実装クラスがあります。
簡単に実装するために、AbstractCollection Abstractクラスはコレクションで定義されており、コレクションのほとんどの機能を実装しています。このようにして、コレクション実装クラスでは、抽象コレクションを継承することにより、重複したエンコードを保存できます。 AbstractListとAbstractsetは、AbstractCollectionから継承され、特定のリストの実装クラスがAbstractListから継承し、設定された実装クラスがAbstractSetから継承します。
さらに、コレクションにはIterator()関数があり、Iteratorインターフェイスを返すために使用されます。通常、Iterator Iteratorを介してコレクションを通過します。 ListIteratorは、リストインターフェイスに固有です。 List Interfaceでは、ListiteratorオブジェクトがListiterator()を介して返されます。
次に、各インターフェイスと抽象クラスの導入を見てみましょう。次に、実装クラスを詳細に理解します。
1。コレクションの紹介
コレクションの定義は次のとおりです。
パブリックインターフェイスコレクション<e> reding iterable <e> {}これは、コレクションの基本操作を含む、非常に抽象化されたコレクションであるインターフェイスです。追加、削除、クリア、トラバース(読書)、空のかどうか、サイズの取得、特定の要素によって保護されているかどうかなどです。
コレクションインターフェイスのすべてのサブクラス(ダイレクトサブクラスと間接サブクラス)は、パラメーターのないコンストラクターとパラメーターコレクションを持つコンストラクターの2つのコンストラクターを実装する必要があります。パラメーターを備えたコンストラクターを使用して、コレクションのタイプを変換できます。
//コレクションApiabstract boolean add(eオブジェクト)抽象的ブールアダル(コレクション<?extends e> collection)abstract void clear()abstract boolean contains(オブジェクトオブジェクト)抽象的ブーリアンcontasall(collection <?> collection)abstract boolean equalオブジェクト)抽象的boolean removeall(collection <?> collection)abststract boolean reasteall(collection <?> collection)要約int size()abstract <t> t [] toarray(t [] array)abstract object [] toarray()
2。リストの紹介
リストの定義は次のとおりです。
パブリックインターフェイスリスト<e>拡張コレクション<e> {}リストは、コレクションから継承されるインターフェイスです。つまり、リストはコレクションの一種です。リストは順序付けられたキューであり、リスト内の各要素にはインデックスがあります。最初の要素のインデックス値は0で、後続の要素+1のインデックス値は順番です。セットとは異なり、複製要素がリストに許可されています。リストの公式紹介は次のとおりです。
リストは、その要素の順序を維持するコレクションです。リスト内のすべての要素にはインデックスがあります。したがって、各要素はインデックスでアクセスでき、最初のインデックスはゼロです。通常、リストは、要素が一意でなければならないセットと比較して、重複する要素を許可します。
APIについて。リストはコレクションインターフェイスから継承されるため、コレクション内のすべての機能インターフェイスが自然に含まれています。リストは順序付けられたキューであるため、独自のAPIインターフェイスもあります。主なものには、「指定された場所の要素を追加、削除、取得、変更する」、「リストのサブキューを取得」などが含まれます。
//コレクションApiabstract boolean add(eオブジェクト)抽象的ブールアダル(コレクション<?extends e> collection)abstract void clear()abstract boolean contains(オブジェクトオブジェクト)抽象的ブーリアンcontasall(collection <?> collection)abstract boolean equalオブジェクト)抽象的ブールムーヴェアル(コレクション<?>コレクション)要約ブーリアンリエイク(コレクション<?場所)要約int indexof(オブジェクトオブジェクト)要約int lastindexof(object object)abstract listiterator <e> listiterator(int location)abstract listiterator <e> listiterator()abstract e remover(int location、e object)abstract list <e> sublist(int start、int end)
3。設定の紹介
セットは次のように定義されています。
パブリックインターフェイスセット<e>拡張コレクション<e> {}セットは、コレクションから継承されたインターフェイスです。つまり、セットはコレクションの一種でもあります。セットは、要素を重複していないコレクションです。
APIについて。 SetのAPIはコレクションとまったく同じです。
// apiabstract boolean add(e object)要約ブールアドラル(コレクション<?extends e> collection)抽象void clear()要約ブールコンテンズ(オブジェクトオブジェクト)抽象ブール値contasall(collection <?> collection)abstract boolean equalオブジェクト)抽象的boolean removeall(collection <?> collection)abststract boolean reasteall(collection <?> collection)要約int size()abstract <t> t [] toarray(t [] array)abstract object [] toarray()
4。AbstractCollection
AbstractCollectionの定義は次のとおりです。
パブリックアブストラクトクラスAbstractCollection <e>実装コレクション<e> {} AbstractCollectionは、Iterator()とsize()を除くコレクション内の関数を実装する抽象クラスです。
AbstractCollectionの主な機能:コレクションインターフェイスのほとんどの機能を実装します。これにより、ArrayList、LinkedListなどのコレクションを実装する他のクラスが容易になります。これらのクラスがコレクションインターフェイスを実装したい場合、ほとんどのインターフェイスはAbstractCollectionを継承することで実装されています。
5。AbstractList
AbstractListの定義は次のとおりです。
パブリックアブストラクトクラスAbstractList <e> extends AbstractCollection <e>実装リスト<e> {} AbstractListは、AbstractCollectionを継承し、リストインターフェイスを実装する抽象クラスです。 size()およびget(int location)を除くリストの関数を実装します。
AbstractListの主な機能:リストインターフェイスのほとんどの関数を実装します。これにより、他のクラスがリストを継承することが容易になります。
さらに、AbstractCollectionと比較して、Iterator()インターフェイスはAbstractList Abstractクラスに実装されています。
6。要約セット
抽象セットの定義は次のとおりです。パブリックアブストラクトクラスの要約<e>拡張<e> {e> {}を実装しますAbstractsetは、AbstractCollectionを継承し、設定されたインターフェイスを実装する抽象クラスです。コレクションインターフェイスのセットインターフェイスとAPIはまったく同じであるため、セットには独自のAPIがありません。 AbstractCollectionと同様に、iterator()およびsize()を除いて、リスト内の関数を実装します。
Abstractsetの主な機能:セットインターフェイス内のほとんどの機能を実装します。これにより、他のクラスが容易になり、セットインターフェイスを実装します。
7。Iterator
イテレータの定義は次のとおりです。
パブリックインターフェイスIterator <e> {}イテレーターはインターフェイスであり、コレクションの反復剤です。コレクションは、コレクションの要素を介してイテレーターを介して通過できます。 Iteratorが提供するAPIインターフェイスには、次の要素が存在するかどうか、次の要素を取得し、現在の要素を削除します。
注:Iteratorがコレクションを通過すると、それは故障メカニズムに基づいています。つまり、特定のスレッドaがイテレーターを介してセットを通過する場合、セットのコンテンツが他のスレッドによって変更された場合。次に、スレッドAがセットにアクセスすると、ConcurrentModificationExceptionの例外がスローされ、フェイルファストイベントが発生します。フェイルファーストの詳細な内容については、特にフェイルファーストの要約の後に説明します。
// iteratorのapiabstract boolean hasnext()abstract e next()abstract void remove()
8。listiterator
Listiteratorの定義は次のとおりです。
public interface listiterator <e> extends iterator <e> {} Listiteratorは、キューイテレーターであるIteratorから継承されたインターフェイスです。便利なリストに特別に使用されているため、前方/後方トラバーサルを提供できます。 Iteratorと比較して、追加、以前の要素が存在するかどうか、以前の要素を取得するなど、APIインターフェイスを追加します。
// listiteratorのapi // iteratorのインターフェイスから継承された抽象boolean hasnext()abstract e next()abstract void remove()