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のメリットと注意点

メリット

  1. 可変長:サイズを気にせず、要素を自由に追加・削除可能。
  2. 操作が簡単:豊富なメソッドで直感的な操作ができる。
  3. ジェネリクス対応:型安全なプログラミングが可能。

注意点

  1. スレッドセーフではない:マルチスレッド環境で使用する場合は注意が必要。
  2. 挿入・削除のパフォーマンス:配列を再構築するため、大規模データでは性能が低下する可能性がある。
  3. プリミティブ型の扱いintdoubleなどのプリミティブ型は、対応するラッパークラス(IntegerDouble)に変換される。

実用例

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);


練習問題

問題:買い物リストを作成するプログラム

  1. ユーザーに商品名を入力させて、ArrayListに追加する。
  2. 入力が終了したら、リストの内容を表示する。
  3. 特定の商品を削除する機能を追加する。

ヒント

  • 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は、柔軟で使いやすいデータ構造を提供する強力なツールです。以下を次の学習目標にすると良いでしょう。

  1. LinkedList:ArrayListと違うデータ構造を学ぶ。
  2. スレッドセーフなコレクションVectorCopyOnWriteArrayList
  3. Stream API:ArrayListと連携したデータ操作の簡素化。

実際のプログラムで使いながら、さらに理解を深めていきましょう!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。