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

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:ArrayList

この記事の練習問題で使用する知識:
基礎構文、制御構造、メソッド(レッスン1~3)ArrayListHashSetTreeSetHashMapTreeMap

<<前のページ 問題集Top 次のページ>>

JAVAの文法「ArrayList」とは

ここではArrayListの意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。



ArrayListはJavaでよく使われるデータ構造の1つです。

配列のように複数のデータを一つの変数に格納し、サイズを自由に変更できる便利なコレクションです。(配列は最初に決めたサイズを後で変更することはできません)

本記事ではArrayListの基本的な使い方や操作方法をわかりやすく解説します。

配列を理解していることが前提の説明となりますので、自信がない方は先に配列の復習をしましょう↓↓

【JAVA】レッスン2-07:配列を理解しよう【JAVA】配列を無料で学べる入門テキスト。配列という言葉の意味や使用方法を、プログラミング初心者に向けて簡単に説明します。分かりやすい練習問題を解くことでJAVAのスキルアップに繋がりますので、一度覗いてみてください。...

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の基本的な操作

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は扱うデータ型を指定できるため、異なる型のデータが混在することを防ぎます。これによりコンパイル時に型の安全性が保たれます。

JAVA練習問題4-1_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);
    }
}

正解コードの解説

この解説ではリスト操作に関するJavaコードの各部分を説明します。

特にArrayListの利用方法について詳しく説明しています。

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を使って再度リストの内容を表示し、更新内容を確認します。

まとめ

このコードではArrayListを用いた動的なリスト操作について学びました。

ユーザーから入力された値をリストに追加したり、特定の値がリストに存在するかをチェックして削除するなど、基本的な操作を習得できる内容です。

ArrayListの利便性を理解し、リスト操作の基礎を習得できたかと思います。

プログラムを実行しながらArrayListの柔軟さをぜひ体感してください

<<前のページ 問題集Top 次のページ>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    JAVAテキスト&問題集へ戻る
    トップページへ戻る