ArrayとArrayListの違い

Anonim

ArrayおよびArrayListとは何ですか?

ArrayとArrayListの両方は、Javaプログラムで頻繁に使用されるインデックスベースのデータ構造です。概念的に言えば、ArrayListは内部的に配列によってサポートされていますが、2つの違いを理解することは、優れたJava開発者になるための鍵です。まずは基本的なステップ、特にコーディングを始めたばかりの初心者です。どちらもプリミティブまたはオブジェクトのいずれかになるJavaの要素を格納するために使用されますが、機能とパフォーマンスの面でかなりの差があります。 2つの主な違いは、ArrayListは静的であるのに対し、ArrayListは本質的に動的であることです。この記事では、2つをさまざまな面で比較して、1つを選択できるようにします。

<!配列と配列の違い

サイズ変更可能

  1. 2つのデータ構造の主な顕著な相違点の1つは、配列が本質的に静的であるということです。つまり、配列は固定長のデータ型ですArrayListは本質的に動的です。つまり、可変長データ構造です。技術的には、Arrayオブジェクトが作成されると、Arrayの長さを変更または変更することはできません。これは、同じデータ型の要素の順次収集を含みます。 Javaでの配列は、C / C ++での配列とは異なる働きをします。一方、ArrayListはサイズを変更することができ、配列は必要に応じて拡大できます。動的なデータ構造であるため、要素をリストに追加したり削除したりすることができます。

<!ジェネリッククラスの配列をJavaで作成することはできません。したがって、配列とジェネリックは手に入らないので、配列が共変するという基本的な理由のために汎用配列を作成することは不可能です。ジェネリックは不変である。配列は固定長のデータ構造体ですが、特定のデータ型の同じクラスまたはプリミティブのオブジェクトを含みます。したがって、Arrayオブジェクトの作成時に指定したデータ型以外の異なるデータ型を格納しようとすると、単に「ArrayStoreException」がスローされます。一方、ArrayListは型安全性を確保するためにGenericsをサポートしています。

<! - 3 - >
  1. プリミティブ

int、double、long、charなどのプリミティブデータ型は、ArrayListでは使用できません。それはむしろオブジェクトを保持し、プリミティブはJavaではオブジェクトと見なされません。一方、配列は、オブジェクトを格納するためのJavaで最も効率的なデータ構造の1つであるため、プリミティブとオブジェクトをJavaで保持することができます。これは、同じタイプまたは異なるタイプのオブジェクトを保持するように設計された集約されたデータ型です。

Length
  1. Arrayの長さを取得するには、Arrayで操作を実行するための長さを知っている必要があるため、コードでlength属性にアクセスする必要があります。ArrayListはsize()メソッドを使用してArrayListのサイズを決定しますが、Arrayの長さを決定するのとは多少異なります。 size()メソッドの属性は、ArrayList内の要素の数を決定します。これは、ArrayListの容量です。

  1. の場合:

public class ArrayLengthTest {

public static void main(String [] args){ ArrayList arrList = new ArrayList();

String [] items = {"One"、 "Two"、 "Three"};

for(String str:items){

arrList。 add(str);

}

int size = items。サイズ();

システム。でる。 println(size);

}

実装

Arrayは動的に作成されるJavaのネイティブプログラミングコンポーネントであり、要素を保持する代入演算子を使用し、ArrayListはadd()属性を使用して要素を挿入します。 ArrayListは、指定されたメソッドのセットを使用して要素にアクセスし、要素を変更するJavaのコレクションフレームワークのクラスです。 ArrayListのサイズは、動的に増減できます。配列内の要素は連続したメモリ位置に格納され、そのサイズは静的なままです。

パフォーマンス

ArrayListはArrayによってサポートされているため、両方のデータ構造が同じようなパフォーマンスを提供しますが、CPU時間とメモリ使用量の点では、たとえば、配列のサイズを知っていれば、ArrayListを使うことになります。ただし、Arrayを反復処理するのは、ArrayListを反復処理するよりも少し速いです。プログラムに多数のプリミティブが含まれる場合、配列はArrayListよりも時間とメモリの両方で大幅に優れたパフォーマンスを発揮します。配列は、コレクションの実装で使用できる低レベルのプログラミング言語です。ただし、パフォーマンスは実行している操作によって異なる場合があります。

  1. 配列対。 Arraylist

Array

  1. ArrayList

Arrayは、配列オブジェクトが作成されると長さを変更できない固定長のデータ構造です。

ArrayListは本質的に動的です。つまり、必要に応じてサイズを変更することができます。

配列のサイズは、プログラム全体にわたって静的なままです。 ArrayListのサイズは、負荷と容量に応じて動的に大きくなります。
代入演算子を使用して要素を格納します。 add()属性を使用して要素を挿入します。
プリミティブと、同じまたは異なるデータ型のオブジェクトを含むことができます。 プリミティブはArrayListで使用できません。オブジェクト型のみを含めることができます。
配列とジェネリックは手に入りません。 GenericsはArrayListで使用できます。アレイは多次元であり得る。
ArrayListは1次元です。 要素が連続したメモリ位置に格納されるネイティブプログラミングコンポーネントです。
オブジェクトは連続した場所に決して格納されないJavaのコレクションフレームワークのクラスです。 長さ変数は、配列の長さを決定するために使用されます。
Size()メソッドは、ArrayListのサイズを決定するために使用されます。 指定された要素またはオブジェクトを格納するために、ArrayListより少ないメモリしか使用しません。
オブジェクトを格納するために、Arrayよりも多くのメモリを消費します。 配列の反復処理は、ArrayListの反復処理よりも高速です。
ArrayListを反復処理すると、パフォーマンスが大幅に遅くなります。 要約
配列を低レベルのデータ構造にする単純な理由から、配列をプログラムで実装するとArrayListsで同じ結果を得るよりも速く結果を得ることができると考える人もいますが、再演する。まあ、ArrayListの長さは固定ですが、ArrayListのサイズは動的に増減することができます。しかし、違いにもかかわらず、彼らはいくつかの類似点も共有しています。どちらもJavaのインデックスベースのデータ構造であり、オブジェクトを格納することができ、ヌル値と重複を許可します。さて、オブジェクトのサイズを事前に知っていれば、配列を持っていなければなりません。サイズについてわからない場合は、ArrayListを参照してください。