【6日でできるJava入門】可変サイズの配列

 Javaでは、配列(String[]など)は作成時にサイズを決める必要があります。しかし、ファイルなど外部データを1行ずつ読み込む場合、事前にサイズが分からないことが多いです。
 そのようなケースで便利なのが、可変サイズの配列を実現するArrayListクラスです。ArrayListを使えば、後から自由に要素を追加・削除でき、配列サイズの管理も自動化されます。

1.ArrayListクラスの基本

1.1. ArrayListの特徴と宣言

ArrayListは、要素数を自由に増減できる配列のようなコレクションです。
通常配列は String[] arr = new String[10]; のように宣言し、サイズは変更できません。
一方、ArrayListは下記のように宣言します。

import java.util.ArrayList;

// 文字列を格納する可変長配列の宣言と初期化
ArrayList<String> nameList = new ArrayList<String>();
  • <String>は格納するデータ型(ジェネリクス)。他にもIntegerや自作クラスも可。

1.2. 基本的な使い方

  • 要素の追加: add()
  • 要素の取得: get()
  • サイズの取得: size()

サンプル:要素の追加と出力

ファイル名: lesson22_1.java

import java.util.ArrayList;

public class lesson22_1 {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<String>();
        fruits.add("りんご");
        fruits.add("バナナ");
        fruits.add("みかん");

        for (int i = 0; i < fruits.size(); i++) {
            System.out.println(i + ": " + fruits.get(i));
        }
    }
}

実行結果

0: りんご
1: バナナ
2: みかん

2.ファイルデータをArrayListへ格納する実践例

2.1. ファイルの各行を分割しArrayListへ格納

 たとえば、都道府県名と県庁所在地が「都道府県名,県庁所在地」の形式でファイルに記録されている場合、次のように読み込んで分割し、それぞれのリストに格納できます。

サンプル:ファイルから可変長配列に格納

ファイル名: lesson22_2.java

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;

public class lesson22_2 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new FileReader("sample2.txt"));
        ArrayList<String> prefectures = new ArrayList<String>();
        ArrayList<String> capitals = new ArrayList<String>();

        String line;
        while ((line = br.readLine()) != null) {
            int pos = line.indexOf(',');
            prefectures.add(line.substring(0, pos));
            capitals.add(line.substring(pos + 1));
        }
        br.close();

        for (int i = 0; i < prefectures.size(); i++) {
            System.out.println(prefectures.get(i) + " - " + capitals.get(i));
        }
    }
}

sample2.txtの例

Eclipseの場合、プロジェクト直下にこのファイルを配置します。

北海道,札幌
青森県,青森
岩手県,盛岡

実行結果

北海道 - 札幌
青森県 - 青森
岩手県 - 盛岡

2.2. 主要なArrayListメソッド(例と対応)

操作ArrayListの場合配列の場合
初期化new ArrayList<String>()new String[サイズ]
追加add("A")該当なし
要素取得get(i)[i]
要素の個数取得size().length
上書きset(i, "B")[i] = "B"
削除remove(i)該当なし

3.数値型や他の型も扱える(ラッパークラス)

  • ArrayList<int>のような基本型は不可。
  • ラッパークラス(IntegerDouble)で扱う。
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(10);
numbers.add(20);
System.out.println(numbers.get(0)); // 10

4.Javaバージョンとジェネリクス

  • Java 5以降では<String>のように型指定(ジェネリクス)を付けるのが標準。
  • Java 1.4以前は型を指定せず、ArrayList list = new ArrayList();と書き、要素取得時にキャストが必要。

まとめ

  • 可変サイズの配列ArrayListを使うことで柔軟にデータ管理が可能。
  • サイズ不明のデータ(ファイルなど)はArrayListで受け取り、size()get()で自在に操作できる。
  • ラッパークラスやジェネリクス、主要メソッドを活用して、実践的なデータ処理をマスターしましょう。