モジュールのレッスン (2/2)
コレクションと ArrayList
Java の従来の配列は、作成時に固定サイズが定義されています。サイズが動的に変化するデータのリストを操作するために、Java は Java Collections Framework を提供します。最も一般的に使用されるクラスは ArrayList です。
ArrayList クラスとジェネリックス
ArrayList は、サイズ変更可能な配列をメモリに実装します。 ArrayList を宣言するには、山括弧 < > で囲んで、それに含まれる要素のタイプを指定する必要があります。この機能は ジェネリック と呼ばれます。
ArrayList を使用するには、java.util.ArrayList からファイルの先頭にインポートする必要があります。
宣言とインスタンス化:
import java.util.ArrayList;
ArrayList<String> shoppingList = new ArrayList<>();コアメソッド
ArrayList の基本的な操作は次のとおりです。
add(element): リストの最後に要素を追加します。get(index): 指定されたインデックス (0 から始まる) の要素を返します。size(): 現在リスト内の要素の数を返します。remove(index): 指定されたインデックスにある要素を削除します。
shoppingList.add("Pane");
shoppingList.add("Latte");
System.out.println("Elementi: " + shoppingList.size()); // Prints 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Prints "Pane"リストの反復 (For-Each)
for-each ループは、コレクションのすべての要素を反復処理するための理想的な構造です。
for (String item : shoppingList) {
System.out.println(item);
}Array と ArrayList: メモリとパフォーマンス
ArrayList は静的配列よりもはるかに柔軟ですが、パフォーマンスとメモリのトレードオフが伴います。
- 静的配列: メモリの連続ブロックに割り当てられ、サイズが固定されており、インデックスを介した要素へのアクセスは非常に高速です。オーバーヘッドなしでプリミティブ型を直接保存します。
- ArrayList: 内部的には、初期容量 (通常は 10) を超えたときに (新しいより大きな配列を作成し、古い要素をコピーすることによって) サイズ変更される配列を管理します。さらに、オブジェクト参照のみを保存するため、各要素のメモリ オーバーヘッドが発生します。
オートボックス化とアンボックス化
ArrayList はオブジェクトのみを保持できるため、Java はプリミティブ型とそれぞれのラッパー クラス間の変換を自動的に実行します。
- オートボクシング: プリミティブ型からラッパー クラスへの自動変換。たとえば、
numbers.add(42)を記述すると、Java は42(int) をInteger.valueOf(42)(Integer) に自動的に変換します。 - アンボックス化: ラッパー クラスからプリミティブ型への自動変換。たとえば、
int num = numbers.get(0)を実行すると、Java は内部でIntegerをintに変換します。
自分で試してみてください
ArrayList をインポートし、名前付きの文字列の ArrayList を宣言します。アリスとボブをリストに追加し、size() メソッドを使用してそのサイズを出力します。
ヒントを表示
先頭に「import java.util.ArrayList;」を追加します。 `ArrayList<String> names = new ArrayList<>();` でリストを作成し、要素を追加して、`names.size()` でそのサイズを出力します。
3 回の試行後に解決策が利用可能になります
数値という名前の整数の ArrayList を宣言し、数値 42 を追加し、get() を使用してインデックス 0 で取得して出力します。
ヒントを表示
`ArrayList<Integer>numbers = new ArrayList<>();` (Integer ラッパー クラスとともに) を使用し、`System.out.println(numbers.get(0));` で出力します。
3 回の試行後に解決策が利用可能になります
color という名前の文字列の ArrayList を宣言します。赤、緑、青の色をリストに追加します。最後に、for-each ループを使用してリストを反復処理し、各色を画面に出力します。
ヒントを表示
`ArrayList<String> Colors = new ArrayList<>();` でリストを宣言し、3 つの色を追加し、ループ `for (String c : Colors)` を使用して、`System.out.println(c);` を使用してそれらを印刷します。
3 回の試行後に解決策が利用可能になります