【Java】レッスン4-01:ArrayListの基本操作と使い方をマスターしよう

一つ前の章ではJavaのメソッドについて学習しました。
今回からは コレクション について見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:メソッド編
Lesson4:コレクション編
・Lesson4-1:ArrayListを理解しよう ◁今回はココ
・Lesson4-2:HashSetとTreeSetを理解しよう
・Lesson4-3:HashMapを理解しよう
・Lesson4-4:TreeMapを理解しよう
・確認問題4-☆1:ナインゲームを作ろう
・確認問題4-☆2:アラビア数字をローマ数字に変換するアプリを作ろう
Lesson5:クラス編
JavaのArrayListとは何か|使い方と基本概念を解説

ArrayListはJavaでよく使われるデータ構造の1つです。
配列のように複数のデータを一つの変数に格納し、サイズを自由に変更できる便利なコレクションです。(配列は最初に決めたサイズを後で変更することはできません)
本記事ではArrayListの基本的な使い方や操作方法をわかりやすく解説します。
配列を理解していることが前提の説明となりますので、自信がない方は先に配列の復習をしましょう↓↓

ArrayListの特徴とは?配列との違いを理解しよう
ArrayList
はJavaの標準ライブラリで提供されているクラスの一つで、データのリストを扱うためのクラスです。
配列と似ていますが、配列がサイズが固定されているのに対し、ArrayList
は必要に応じて要素を追加・削除できるため柔軟性高く使用できます。
import java.util.ArrayList; // ArrayListを使用するためのインポート文 public class Main { public static void main(String[] args) { // ArrayListの作成 ArrayList<String> books = new ArrayList<>(); //String型のbooksというArrayListを作成 // addメソッドを使って要素を追加 books.add("ハリーポッター"); books.add("ロード・オブ・ザ・リング"); books.add("ナルニア国物語"); // 要素を表示 System.out.println("本のリスト: " + books); // getメソッドを使って要素を取得 String firstBook = books.get(0); System.out.println("最初の本は: " + firstBook); // removeメソッドを使って要素の削除 books.remove(1); // 2番目の要素を削除(インデックスは0から始まる) System.out.println("削除後のリスト: " + books); // sizeメソッドを使ってリストのサイズを取得 int size = books.size(); System.out.println("現在のリストのサイズ: " + size); } }
要素の追加・取得・削除・サイズ確認のやり方
ArrayListの基本的な操作方法を説明します。
1. ArrayListの宣言
ArrayListを使うには、最初にインポートが必要です。以下のコードでArrayList
クラスをインポートします。
import java.util.ArrayList;
次に、ArrayListの宣言を行います。以下は文字列を格納するArrayListの例です。
// String型のbooksというArrayListを作成 ArrayList<String> books = new ArrayList<>();
ArrayList<String>
は「文字列型のデータを格納するArrayList」を意味します。
<>
内にデータの型を指定します(この部分をジェネリクスと呼びます)。
要素の追加
ArrayListにはadd()
メソッドを使って要素を追加します。
たとえば、本のタイトルを追加する場合は次のようにします。
books.add("ハリーポッター"); books.add("ロード・オブ・ザ・リング"); books.add("ナルニア国物語");
要素の取得
ArrayListに追加された要素を取得するには、get()
メソッドを使います。
インデックス番号(0から始まる)を指定して、対応する要素を取得します。
String firstBook = books.get(0); // 最初の本を取得
要素の削除
特定の要素を削除したい場合はremove()
メソッドを使います。
インデックスを指定することで、その位置の要素を削除できます。
books.remove(1); // 2番目の要素を削除(インデックスは0から始まる)
リストのサイズを確認
ArrayListのサイズ(要素の数)を確認する場合は、size()
メソッドを使います。
int size = books.size(); // 現在のリストのサイズ
型指定・動的サイズなどArrayListの便利な機能を押さえよう
- 自動的にサイズ調整:ArrayListは要素の追加や削除に応じて自動的にサイズを調整します。これにより、事前にサイズを指定する必要がなく、動的なデータの管理が可能です。
- ジェネリクス:ArrayListは扱うデータ型を指定できるため、異なる型のデータが混在することを防ぎます。これによりコンパイル時に型の安全性が保たれます。
練習問題|ArrayListの操作に挑戦しよう【追加・削除・検索を実装】

この問題では整数のArrayListを操作します。
まずユーザーが指定した数字を全てリストに保存し、保存完了後には一覧として表示しましょう。
その後ユーザーが再び数字を指定すると、リストにその数字があるか探し、ある場合はそれをリストから削除しましょう。
この問題の要件
以下の要件に従ってコードを完成させてください。
- ユーザーからリストに整数を追加する。
- ユーザーが0を入力するまで整数の追加を続ける。
- リストの内容を表示する。
- ユーザーから検索する数字を入力させ、その数字がリストに含まれているかを確認する。
- 数字が含まれている場合、その数字をリストから削除し、再度リストの内容を表示する。
ただし、以下のような実行結果となること。
リストに追加する数字を入力してください。0を入力すると終了します。 数字を入力: 5 数字を入力: 10 数字を入力: 15 数字を入力: 0 リストの内容: [5, 10, 15] 検索する数字を入力してください: 10 10 はリストに含まれています。削除します。 更新されたリストの内容: [5, 15]
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
1:ArrayListクラスとScannerクラスをインポート
2:ListOperationsクラスの定義
□ mainメソッドの定義
□ □ Scannerオブジェクトscannerの初期化と標準入力の読み込み
□ □ Integer型のArrayListであるnumbersリストの作成
□ □ 「リストに追加する数字を入力してください。0を入力すると終了します。」と出力
□ □ whileループで無限ループを開始
□ □ □ 「数字を入力: 」と出力
□ □ □ ユーザーの入力を整数として読み取り、変数numに代入
□ □ □ if文でnumが0であるかを判定
□ □ □ □ 真の場合、breakでループを終了
□ □ □ numbersリストにnumを追加
□ □ 「リストの内容: 」とnumbersリストを出力
□ □ 「検索する数字を入力してください: 」と出力
□ □ ユーザーの入力を整数として読み取り、変数searchNumに代入
□ □ if文でsearchNumがnumbersリストに含まれているかを判定
□ □ □ 真の場合、「searchNum はリストに含まれています。削除します。」と出力
□ □ □ numbersリストからsearchNumを削除
□ □ else
□ □ □ 「searchNum はリストに含まれていません。」と出力
□ □ 「更新されたリストの内容: 」とnumbersリストを出力
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
import java.util.ArrayList; import java.util.Scanner; public class ListOperations { public static void main(String[] args) { // Scannerオブジェクトを作成し、標準入力を読み取る Scanner scanner = new Scanner(System.in); // 整数を格納するリストを作成 ArrayList<Integer> numbers = new ArrayList<>(); // リストに数字を追加する System.out.println("リストに追加する数字を入力してください。0を入力すると終了します。"); while (true) { System.out.print("数字を入力: "); /*【穴埋め問題1】 ここに以下のコードを書いてください。 1. scannerオブジェクトを使ってユーザーの入力を整数として読み取り、変数numに代入します。 2. if文を使ってnumが0であるかをチェックします。 3. numが0であればbreak文でループを終了させます。そうでなければ、numbersリストにnumを追加します。 */ } // リストの内容を表示 System.out.println("リストの内容: " + numbers); // リストに特定の数字が含まれているかを確認する System.out.print("検索する数字を入力してください: "); /*【穴埋め問題2】 ここに以下のコードを書いてください。 1. scannerオブジェクトを使用してユーザーから整数を読み取り、変数searchNumに代入します。 2. if文を使ってnumbersリストにsearchNumが含まれているか確認します。 3. searchNumが含まれていれば、その数字をリストから削除し、「削除します」と出力します。含まれていなければ「含まれていません」と出力します。 */ // 更新されたリストの内容を表示 System.out.println("更新されたリストの内容: " + numbers); } }
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
import java.util.ArrayList; import java.util.Scanner; public class ListOperations { public static void main(String[] args) { // Scannerオブジェクトを作成し、標準入力を読み取る Scanner scanner = new Scanner(System.in); // 整数を格納するリストを作成 ArrayList<Integer> numbers = new ArrayList<>(); // リストに数字を追加する System.out.println("リストに追加する数字を入力してください。0を入力すると終了します。"); while (true) { System.out.print("数字を入力: "); int num = scanner.nextInt(); if (num == 0) { break; } numbers.add(num); } // リストの内容を表示 System.out.println("リストの内容: " + numbers); // リストに特定の数字が含まれているかを確認する System.out.print("検索する数字を入力してください: "); int searchNum = scanner.nextInt(); if (numbers.contains(searchNum)) { System.out.println(searchNum + " はリストに含まれています。削除します。"); numbers.remove(Integer.valueOf(searchNum)); } else { System.out.println(searchNum + " はリストに含まれていません。"); } // 更新されたリストの内容を表示 System.out.println("更新されたリストの内容: " + numbers); } }
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
Scanner
とArrayList
のインポートと準備import java.util.ArrayList; import java.util.Scanner;
最初に
ArrayList
とScanner
クラスをインポートしています。ArrayList
はJavaで可変長の配列リストを扱うためのクラスで、要素の追加や削除が柔軟に行えます。Scanner
はユーザー入力を取得するために使用します。メインクラスとメインメソッドの定義
public class ListOperations { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); ArrayList<Integer> numbers = new ArrayList<>();
ListOperations
クラスの中でmain
メソッドがプログラムのエントリーポイントとして定義されています。このメソッド内で
Scanner
オブジェクトと、整数を格納するためのArrayList
であるnumbers
を作成しています。ユーザーからの数字の入力と
ArrayList
への追加System.out.println("リストに追加する数字を入力してください。0を入力すると終了します。"); while (true) { System.out.print("数字を入力: "); int num = scanner.nextInt(); if (num == 0) { break; } numbers.add(num); }
この部分ではユーザーが入力した数字を
numbers
リストに追加しています。入力が0の場合はループを終了し、それ以外の場合はリストに追加します。
ArrayList
はリストのサイズを自動的に拡張するため、要素を自由に追加できます。リストの内容の表示
System.out.println("リストの内容: " + numbers);
System.out.println
を使って、リストに格納されたすべての値を表示します。ArrayList
はtoString
メソッドを持っており、リストの全要素が[ ]
で囲まれた形で表示されます。特定の数値の検索と削除操作
System.out.print("検索する数字を入力してください: "); int searchNum = scanner.nextInt(); if (numbers.contains(searchNum)) { System.out.println(searchNum + " はリストに含まれています。削除します。"); numbers.remove(Integer.valueOf(searchNum)); } else { System.out.println(searchNum + " はリストに含まれていません。"); }
ここではユーザーが指定した数が
numbers
リストに含まれているかを確認し、含まれていればリストから削除します。ArrayList
のcontains
メソッドは、指定した要素がリストに含まれているかを判定し、remove
メソッドは該当する要素を削除します。このとき
Integer.valueOf
を使用して正確な要素削除を行います。更新されたリストの表示
System.out.println("更新されたリストの内容: " + numbers);
リストの要素が削除された後、
System.out.println
を使って再度リストの内容を表示し、更新内容を確認します。
まとめ
このコードではArrayList
を用いた動的なリスト操作について学びました。
ユーザーから入力された値をリストに追加したり、特定の値がリストに存在するかをチェックして削除するなど、基本的な操作を習得できる内容です。
ArrayList
の利便性を理解し、リスト操作の基礎を習得できたかと思います。
プログラムを実行しながらArrayList
の柔軟さをぜひ体感してください。