
【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>
のような基本型は不可。- ラッパークラス(
Integer
やDouble
)で扱う。
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()
で自在に操作できる。 - ラッパークラスやジェネリクス、主要メソッドを活用して、実践的なデータ処理をマスターしましょう。