【Java】レッスン4-1:ArrayListを理解しよう

ながみえ

一つ前の章ではJavaのメソッドについて学習しました。

今回からは コレクション について見ていきましょう。

Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:メソッド編
Lesson4:コレクション編

 ・Lesson4-1:ArrayListを理解しよう ◁今回はココ
 ・Lesson4-2:HashSetとTreeSetを理解しよう
 ・Lesson4-3:HashMapを理解しよう
 ・Lesson4-4:TreeMapを理解しよう
 ・確認問題4-☆1:ナインゲームを作ろう
 ・確認問題4-☆2:アラビア数字をローマ数字に変換するアプリを作ろう
Lesson5:クラス

<<前のページ

学習記事一覧

次のページ>>

ArrayListとは何か|特徴・使い方・基本操作を解説

Javaでデータの集まりを扱う際によく使われるのがArrayListです。

配列と似ていますが、要素数を自由に増減できる柔軟さがあり、要素の追加・削除・サイズ取得などを簡単に行えます。

本記事では、ArrayListの基本的な使い方から、要素の操作方法、配列との違いまでを初心者にもわかりやすく解説します。

これを学べば、固定長の配列では難しい可変的なデータ管理ができ、より実用的で効率的なプログラムを組めるようになるでしょう。

それでは、柔軟なデータ構造を活用する第一歩を踏み出しましょう。

ArrayListの特徴と宣言方法|配列との違いを理解しよう

ArrayList はJavaの標準ライブラリで提供されているクラスの一つで、データのリストを扱うためのものです。

配列と似ていますが、配列がサイズが固定されているのに対し、ArrayListは必要に応じて要素を追加・削除できるため柔軟性高く使用できます。

ArrayListを使用するには、Scannerなどと同様にインポートした上でインスタンス化する必要があります。

import java.util.ArrayList;	// ArrayListクラスのインポート

ArrayList<型> 変数 = new ArrayList<>();	// ArrayListクラスのインスタンスを作成

例えば、本の名前を格納するbooksというArrayListを作成するには、以下のように記述します。

import java.util.ArrayList;	// ArrayListを使用するためのインポート文

public class Main {
    public static void main(String[] args) {
        ArrayList<String> books = new ArrayList<>();	//String型のbooksというArrayListを作成
    }
}

これでbooksというArrayListが作成されました。

ArrayListの操作メソッド|要素の追加・取得・削除・サイズ確認

ArrayListを操作するには、Java標準のメソッドを使用します。

メソッドを使用するには、作成したArrayList名と使用するメソッド名をドットで繋ぎ、以下のように記述します。

ArrayList名.メソッド名()

リストへの要素追加|add()メソッドの使い方

ArrayListには add()メソッド を使って要素を追加します。

たとえば、先ほど生成したbooksというArrayListに本のタイトルを追加する場合は、次のようにします。

books.add("ハリーポッター");
books.add("ロード・オブ・ザ・リング");
books.add("ナルニア国物語");

これでbooksに3つの本のタイトルが格納されました。

配列は要素の数を変更できませんが、ArrayListはこのように自由に追加できます。

リストの要素の取得|get()メソッドの使い方

ArrayListに追加された要素を取得するには、get()メソッド を使います。

インデックス番号(0から始まる)を指定して、対応する要素を取得します。

String book_1 = books.get(0); // 最初の本を取得:ハリーポッター
String book_2 = books.get(1); // 2番目の本を取得:ロード・オブ・ザ・リング
String book_3 = books.get(2); // 3番目の本を取得:ナルニア国物語

リストから要素を削除|remove()メソッドの使い方

特定の要素を削除したい場合は remove()メソッド を使います。

インデックスを指定することで、その位置の要素を削除できます。

books.remove(1); // 2番目の要素を削除:ロード・オブ・ザ・リング

リストのサイズを確認|size()メソッドの使い方

ArrayListのサイズ(要素の数)を確認する場合は、size()メソッド を使います。

int size = books.size(); // 現在のリストのサイズ

まとめ|柔軟なデータ管理を可能にする基礎

今回の学習では、ArrayListの特徴と宣言方法、配列との違い、そして要素の追加・取得・削除・サイズ確認といった基本操作を学びました。

これにより、固定長の配列では難しかった柔軟なデータ管理が可能になり、状況に応じて要素を自在に操作できるようになります。

こうしたスキルは、日常的なプログラミングから大規模なアプリケーション開発まで幅広く役立ちます。

ここで身につけた知識を活かし、さらに効率的で実用的なコード作りに挑戦していきましょう。

練習問題|ArrayListの操作に挑戦しよう【追加・削除・検索を実装】

この問題では整数のArrayListを操作します。

まずユーザーが指定した数字を全てリストに保存し、保存完了後には一覧として表示しましょう。

その後ユーザーが再び数字を指定すると、リストにその数字があるか探し、ある場合はそれをリストから削除しましょう。

この問題の要件

以下の要件に従ってコードを完成させてください。

  • ユーザーからリストに整数を追加する。
  • ユーザーが0を入力するまで整数の追加を続ける。
  • リストの内容を表示する。
  • ユーザーから検索する数字を入力させ、その数字がリストに含まれているかを確認する。
  • 数字が含まれている場合、その数字をリストから削除し、再度リストの内容を表示する。

ただし、以下のような実行結果となること。

リストに追加する数字を入力してください。0を入力すると終了します。
数字を入力: 5
数字を入力: 10
数字を入力: 15
数字を入力: 0
リストの内容: [5, 10, 15]
検索する数字を入力してください: 10
10 はリストに含まれています。削除します。
更新されたリストの内容: [5, 15]

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント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リストを出力

Q
ヒント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);
    }
}

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

練習問題の解答と解説

この問題の正解コードとその解説は以下の通りです。

クリックして開いて確認してください。

Q
正解コード
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);
    }
}
Q
正解コードの解説

コードをブロックごとに分割して解説します。

ScannerArrayListのインポートと準備

import java.util.ArrayList;
import java.util.Scanner;

最初にArrayListScannerクラスをインポートしています。

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を使って、リストに格納されたすべての値を表示します。

ArrayListtoStringメソッドを持っており、リストの全要素が[ ]で囲まれた形で表示されます。

特定の数値の検索と削除操作

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リストに含まれているかを確認し、含まれていればリストから削除します。

ArrayListcontainsメソッドは、指定した要素がリストに含まれているかを判定し、removeメソッドは該当する要素を削除します。

このときInteger.valueOfを使用して正確な要素削除を行います。

更新されたリストの表示

System.out.println("更新されたリストの内容: " + numbers);

リストの要素が削除された後、System.out.printlnを使って再度リストの内容を表示し、更新内容を確認します。

もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいJava学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました