ArrayListクラスを新人エンジニアに解説
こんにちは。ゆうせいです。
今回は、JavaのArrayListクラスについて解説します!
ArrayListは、可変長の配列を提供するコレクションフレームワークの1つで、データの追加や削除が簡単に行える便利なクラスです。
ArrayListとは?
ArrayListは、Javaの標準ライブラリjava.util
パッケージに含まれているクラスで、配列(Array
)と似ていますが、以下のような特徴があります。
- 配列と異なり、要素数を動的に変更可能。
- 要素を簡単に追加、削除、検索できるメソッドが用意されている。
- インデックスを利用して要素にアクセスできる。
例えるなら…
ArrayListは「伸縮自在の引き出し」のようなものです。必要なだけ引き出しを増やしたり、減らしたりできます。
ArrayListの基本的な使い方
1. インポート
ArrayListを使うには、java.util
パッケージをインポートします。
import java.util.ArrayList;
2. ArrayListの宣言と初期化
基本形
ジェネリクス(<>
)でデータ型を指定します。
ArrayList<String> list = new ArrayList<>();
データ型を指定しない場合
非推奨ですが、ジェネリクスを使わずに以下のように書くこともできます。
ArrayList list = new ArrayList();
注意:型を指定しない場合、取り扱うデータの型が曖昧になるため、型キャストが必要になります。
3. 要素の追加
ArrayListに要素を追加するには、add()
メソッドを使用します。
list.add("りんご");
list.add("バナナ");
list.add("オレンジ");
System.out.println(list); // 結果: [りんご, バナナ, オレンジ]
特定の位置に要素を挿入することもできます。
list.add(1, "いちご"); // インデックス1に挿入
System.out.println(list); // 結果: [りんご, いちご, バナナ, オレンジ]
4. 要素へのアクセス
インデックスを指定して要素にアクセスするには、get()
メソッドを使用します。
String fruit = list.get(2);
System.out.println(fruit); // 結果: バナナ
5. 要素の更新
特定のインデックスの要素を更新するには、set()
メソッドを使用します。
list.set(2, "ぶどう"); // インデックス2の要素を更新
System.out.println(list); // 結果: [りんご, いちご, ぶどう, オレンジ]
6. 要素の削除
インデックス指定で削除
list.remove(1); // インデックス1の要素を削除
System.out.println(list); // 結果: [りんご, ぶどう, オレンジ]
要素を指定して削除
list.remove("ぶどう"); // "ぶどう"を削除
System.out.println(list); // 結果: [りんご, オレンジ]
7. 要素の検索
特定の要素が存在するか確認
boolean contains = list.contains("りんご");
System.out.println(contains); // 結果: true
特定の要素のインデックスを取得
int index = list.indexOf("オレンジ");
System.out.println(index); // 結果: 1
8. ArrayListのサイズ
現在の要素数を取得するには、size()
メソッドを使用します。
int size = list.size();
System.out.println("リストのサイズ: " + size); // 結果: 2
9. すべての要素を削除
clear()
メソッドを使用すると、すべての要素を削除できます。
list.clear();
System.out.println(list); // 結果: []
ArrayListのループ処理
ArrayListの要素を順番に処理するには、以下のようなループを使用します。
1. 拡張for文
for (String fruit : list) {
System.out.println(fruit);
}
2. 通常のfor文
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
3. forEachメソッド
Java 8以降では、forEach()
メソッドを使ったラムダ式も使用できます。
list.forEach(fruit -> System.out.println(fruit));
ArrayListのメリットと注意点
メリット
- 可変長:サイズを気にせず、要素を自由に追加・削除可能。
- 操作が簡単:豊富なメソッドで直感的な操作ができる。
- ジェネリクス対応:型安全なプログラミングが可能。
注意点
- スレッドセーフではない:マルチスレッド環境で使用する場合は注意が必要。
- 挿入・削除のパフォーマンス:配列を再構築するため、大規模データでは性能が低下する可能性がある。
- プリミティブ型の扱い:
int
やdouble
などのプリミティブ型は、対応するラッパークラス(Integer
やDouble
)に変換される。
実用例
1. 学生の名簿管理
ArrayList<String> students = new ArrayList<>();
students.add("田中");
students.add("鈴木");
students.add("佐藤");
System.out.println("学生名簿: " + students);
students.remove("鈴木");
System.out.println("更新された名簿: " + students);
2. スコアの平均を計算
ArrayList<Integer> scores = new ArrayList<>();
scores.add(90);
scores.add(85);
scores.add(70);
int total = 0;
for (int score : scores) {
total += score;
}
double average = (double) total / scores.size();
System.out.println("平均スコア: " + average);
練習問題
問題:買い物リストを作成するプログラム
- ユーザーに商品名を入力させて、ArrayListに追加する。
- 入力が終了したら、リストの内容を表示する。
- 特定の商品を削除する機能を追加する。
ヒント
Scanner
で入力を取得。- ループで入力を繰り返し、"終了"と入力されたら停止。
import java.util.ArrayList;
import java.util.Scanner;
public class ShoppingList {
public static void main(String[] args) {
ArrayList<String> shoppingList = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
System.out.println("買い物リストに追加する商品を入力してください(終了するには「終了」と入力):");
while (true) {
String item = scanner.nextLine();
if (item.equals("終了")) {
break;
}
shoppingList.add(item);
}
System.out.println("現在の買い物リスト: " + shoppingList);
System.out.print("削除する商品を入力してください: ");
String removeItem = scanner.nextLine();
shoppingList.remove(removeItem);
System.out.println("更新された買い物リスト: " + shoppingList);
}
}
まとめと次のステップ
ArrayListは、柔軟で使いやすいデータ構造を提供する強力なツールです。以下を次の学習目標にすると良いでしょう。
- LinkedList:ArrayListと違うデータ構造を学ぶ。
- スレッドセーフなコレクション:
Vector
やCopyOnWriteArrayList
。 - Stream API:ArrayListと連携したデータ操作の簡素化。
実際のプログラムで使いながら、さらに理解を深めていきましょう!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
- 新入社員2025年1月8日新人エンジニアの皆さんに向けて「共有フォルダのマナー」を解説
- 新人エンジニア研修講師2025年1月7日研修講師が道徳的免罪符(moral licensing)に陥らないためにできること
- 新入社員2025年1月7日Windowsユーザーの日常生活や仕事で役立つPythonプログラム30選
- 新入社員2025年1月7日Pythonの入門研修の最後に行う演習の例