比較表
比較基準 | リスト | 配列リスト |
---|---|---|
基本 | リストはインタフェースです | ArrayListは標準のCollectionクラスです。 |
構文 | インターフェース一覧 | クラスArrayList |
拡張/実装 | リストインタフェースはCollection Frameworkを拡張します。 | ArrayListはAbstractListを拡張し、List Interfaceを実装します。 |
名前空間 | System.Collections.Generic。 | System.Collections。 |
作業 | インデックス番号に関連付けられている要素(オブジェクト)のリストを作成するために使用されます。 | ArrayListは、オブジェクトを含む動的配列を作成するために使用されます。 |
リストの定義
ListはCollectionフレームワークを拡張するインタフェースです。 リストインタフェースは、順番に並べられた要素の集まりを記述します。 リストインタフェースは、ArrayList、LinkedList、CopyOnWriteArrayList、Vector、Stackなどの次の標準コレクションクラスによって実装されます。 リストインタフェースには、インデックス番号に関連付けられている要素があります。 リスト内の位置(インデックス)によってリスト内の要素にアクセスできます。 Listインタフェースを使用して作成されたリストは、0から始まるインデックスで始まります。
Collectionフレームワークによって継承されたメソッドに加えて、Listインタフェースは独自のメソッドも定義します。 Listインタフェースによって追加されたメソッドは、 add(int、E)およびaddAll(int、Collection)です。 これらのメソッドは、インデックスによってリストに要素を追加します。 メソッドがリストを変更できない場合、リスト内のメソッドはUnsupportedOperationExceptionのような例外をスローすることがあります。 リスト内の1つのオブジェクトがリスト内の別のオブジェクトと互換性がない場合は、 ClassCastExceptionがスローされます。リストにnullオブジェクトを挿入しようとすると、 NullPointerExceptionがスローされます。
get()メソッドを使ってリストから要素を取得できます。 set()メソッドを使用してリスト内の要素の値を設定できます。 メソッドsublist()を使用してリストからサブリストを取得することもできます。 リストの代わりにサブリストを操作するのが便利になります。
ArrayListの定義
標準のCollectionクラスの1つは、 AbstractListクラスを拡張し、 Listインタフェースも実装するArrayListです。 ArrayListクラスは、必要に応じて拡大縮小する動的配列を作成するために使用されます。 ArrayListクラスを使用して作成されたリストは、オブジェクトの配列に他なりません。 Javaでは、標準配列は固定長なので、事前に配列のサイズを知っておく必要があります。 しかし、実行時までに必要な配列の長さがわからない場合があります。 そのため、Collectionフレームワークはこの問題を解決するためにArrayListクラスを導入しました。
ArrayListには、初期容量で配列を作成するコンストラクタがあります。 ArrayListクラスのオブジェクトの容量は、要素が配列に追加されたときに自動的に増加しますが、それでも、メソッドconfirmCapacity()を使用してArrayListのオブジェクトの容量を手動で増やすことができます。 後でメモリを再割り当てするのではなく、最初にarrayの容量を増やすことをお勧めします。 再割り当ては一度にメモリを割り当てるよりもコストがかかるためです。
ListとArrayListの主な違い
- ListとArrayListの最も重要な違いの1つは、listがインタフェースであり、ArrayListが標準のCollection クラスであるということです。
- ListインタフェースはCollectionフレームワークを拡張しますが、ArrayListはAbstractList Classを拡張し、 Listインタフェースを実装します。
- Listインタフェースの名前空間はSystem.Collection.Genericですが、ArrayListの名前空間はSystem.Collectionです。
- リストインタフェースは、シーケンスに格納され、それらのインデックス番号によって識別またはアクセスされる要素のコレクションを作成します。 一方、ArrayListは、必要に応じて動的に配列を拡大できるオブジェクトの配列を作成します。
結論:
ArrayListは、標準Javaにおける静的配列の問題を解決します。つまり、一度作成された配列のサイズを大きくすることはできません。 ArrayListを使用して配列を作成すると、動的配列が作成され、必要に応じてサイズを増減できます。 標準のCollectionクラスArrayListは、Listインタフェースを拡張したものです。