2017-02-25 2 views
2

私はJAVAを学んでおり、クラス内でArrayを使うための以下のメソッドを見てきました。どのような違いがあり、どちらが使いやすいのか?JAVAで使用する配列の種類とその理由は何ですか?

ArrayList<Integer> quizGrades = new ArrayList<Integer>(); 
quizGrades.add(95); 
quizGrades.add(87); 
quizGrades.add(83); 

又は

int[] quizGrades = new int[3]; 
quizGrades[0] = 95; 
quizGrades[1] = 87; 
quizGrades[2] = 83; 
+0

まずGoogleがヒット:http://javahungry.blogspot.com/2015/03/difference-between-array-and-arraylist-in-java-example.html –

+0

@Robertコロンビアしかし 'ArrayList'どちらもリストではありません。 –

+2

リスト ' quizGrades = new ArrayList ();を書きます。可能であれば、具体的な実装に対してコーディングする代わりに、インタフェースに対してコード化を試みてください。 – mike

答えて

2
ArrayList<Integer> quizGrades = new ArrayList<Integer>(); 

ArrayListのコレクションフレームワーク内のデータ構造です。

アレイのサイズがあらかじめわからない場合は、arraylistを使用する必要があります。配列リストは動的に配列のサイズを変更します(挿入操作と削除操作)。

一方、

int[] quizGrades = new int[1] 

は、配列のサイズを変更しないと、あなたは事前にサイズを提供する必要があります。また、アイテムを削除するのは煩雑になり、アイテムを削除する場合はArraylistを使用する方が良いです。

これは主な違いです。 int[]は、Javaでの特殊な配列型がある間は、https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

+1

'List list = new ArrayList ()'を実行する方が良いことに注意してください。 –

0

ArrayList は、Javaコレクションフレームワーク内のクラスで、挿入についての詳細を読む時間訪問を削除することができます。

ArrayListは、内部配列に連動している一度int[]の長さに変更することができないが、配列の長さのサイズを変更可能にします初期化されました。

今のところ、ArrayListを使用することをお勧めします。使用するほうがはるかに便利で、コレクションフレームワークでデータを操作することができます。

アレイには、メモリフットプリントが小さく、アレイ内の値に直接アクセスする場合の方が効率が良いという利点があります。結局のところ、ArrayListは内部的に小さなオーバーヘッドを追加します。しかし、99%のケースでは、ボトルネックが他の場所(ネットワーク、データベースなど)にあるため、このパフォーマンスペナルティはビジネスアプリケーションでは問題になりません。

を要約すると:初心者としてを、あなたはおそらくArrayListに固執し、唯一のあなたも一緒に作業したり、それらを使用するように制約されている学習したい場合は配列を使用する必要があります。

0

JavaのListクラスとプリミティブarrayのデータ構造は、オブジェクトのコレクションを格納してアクセスするメカニズムの両方です。 ArrayListクラスは、内部的にArrayListにオブジェクトの配列を持つListインタフェースのサイズ変更可能な配列の実装です。

Java APIには、オブジェクトの配列またはリストを必要とするメソッドがあることが多いため、Javaではプリミティブ配列からリストへ、またはその逆に変換するメカニズムがJavaで実装されています。

リストにプリミティブ配列を変換

配列からリストに変換しArrays.asList()を使用してください。 ArrayにリストのtoArray()メソッドを使用し変換したい場合は、プリミティブ配列

にリストを変換する

Integer[] array = new Integer[] { 95, 87, 83 }; 
List<Integer> list = Arrays.asList(array); 
System.out.println(list); // [95, 87, 83] 

Integer[] array2 = list.toArray(new Integer[array.size()]); 

同様に、プリミティブのint値をListに変換したい場合は、単純に値を反復処理して追加することができます。 1.アクセス -

int[] array3 = new int[] { 95, 87, 83 }; 
    List<Integer> list3 = new ArrayList<Integer>(array3.length); 
    for(int val : array3) { 
     list3.add(val); 
    } 
    System.out.println(list3); // [95, 87, 83] 

類似とリストとプリミティブ配列

リストの両方とプリミティブ配列の違い両方0のインデックスとn番目の要素を有する第1の要素を持っているが、nの指標が有します0より小さいかn-1より大きいインデックスを持つ要素は、リスト内でIndexOutOfBoundsException、または配列の場合はArrayIndexOutOfBoundsExceptionとなります。

取得およびプリミティブ配列の要素を設定し

int grade = array[0]; 
array[0] = 98; 
int len = array.length; // number of elements in array 
grade = array[-1]; // throws ArrayIndexOutOfBoundsException 

その後、追加またはから要素を削除することができます取得し、

int grade = list.get(0); 
list.set(0, 98); 
int len = list.size(); // number of elements in list 
grade = list.get(-1); // throws IndexOutOfBoundsException 

リストは不変でない限りリスト内の要素を設定(または読み取り専用)それ。 Collections.unmodifiableList()を参照してください。プリミティブ配列を拡大/縮小するには、新しい配列を作成し、古い要素を新しい配列にコピーする必要があります。

一般に、プリミティブ配列とリストは意味的には同じですが、構文が異なります。 1つのフォームを他のフォームに変換することができます。

0

ArrayListには、arrayという語が含まれています。それは偶然ではありません。
ArrayListは、実際にはListインターフェイスのサイズ変更可能な配列の実装です。
したがって、フードの下では、配列を使用してデータを表します。それは要素の「設定」を操作することは非常に一般的な方法を提供しているため、アレイ上ArrayListを使用して

ほとんどの場合には

は、を支持しなければならない(add(), addAll(), remove(), set(),など...)あなたは、配列を使用して手動で実行する必要があり、その。

さらに、開発者は、実際のサイズが最初に宣言されたサイズに達したときに、要素の「セット」のサイズと要素の「セット」の容量の増減に関する処理を心配する必要がなくなります。

実際、配列では、サイズは固定です。したがって、例のように宣言でそれを知って指定する必要があります:int[] quizGrades = new int[1];

さらに、初期サイズで新しい要素を格納するには十分でない場合は、アレイデータのコピーを別の大きな配列に作成する必要があります。最後に、ArrayListクラスが成長するとき、それはあなたのために何をしますか?

配列を使用するときは?

通常、非常に細かい最適化を実行する必要がある場合。
アプリケーション開発者にとって、必要性はまれです。ここで

いくつかの使用事例:

  • には、ArrayListラッパー(CPU、メモリ)によって引き起こされるわずかなオーバーヘッドを惜しまたい

  • それが十分であり、あなたがする必要があるので、あなたは原始的な使用したいです潜在的に消費される各バイトをスペアします。
    プリミティブ値は、ラッパー値としてメモリを占有しません。
    配列はプリミティブ値を受け入れます。 ListクラスとCollectionクラスはそうではありません。

  • 要素の「セット」の格納方法と取得方法をマスターする必要があります。 容量の増減に関するルールが含まれています。

関連する問題