JavaのArrayListとは?初心者向けに基本操作を徹底解説
配列を使うとき、あらかじめサイズを宣言しなければならないのは面倒だと感じたことはありませんか?実は多くの人が同じ悩みを抱えています。配列に値を追加し始める前に、いくつの値を格納するかを定義しておく必要があるのは、必ずしも便利とは言えません。
そんなときに役立つのが、JavaのArrayListです。
この記事では、ArrayListとは何か、その仕組み、従来の配列との違いについて解説します。さらに、ArrayListクラスを効果的に活用するために知っておくべき重要なメソッドも紹介します。それでは始めましょう!
ArrayListとは?
ArrayListは、サイズ変更可能な配列を作成できる特別なリストです。ArrayListクラスはListインターフェースを実装しており、順序付けられたデータを格納するために使用されます。
Javaで通常の配列を扱う場合、値を格納する前にその配列のサイズを宣言する必要があります。しかし実際には、配列を宣言する時点でいくつの値を格納したいのかがわからないことも多く、これが問題になります。
ArrayListクラスを使えば、格納できる値の数を事前に指定する必要のない配列を定義できます。ArrayListは「動的配列(dynamic array)」とも呼ばれ、要素の追加や削除に応じて容量が自動的に変化します。
ArrayListの作成方法
まずは基本的なところから、ArrayListの宣言方法を見ていきましょう。ArrayListはJavaのListインターフェースを使用するため、通常の配列の宣言方法とはかなり異なります。
Javaファイルを開き、メインクラスに以下のコードを記述してください。
import java.util.ArrayList; ArrayList<String> songs = new ArrayList<>();
これで「songs」という名前のArrayListが作成されました。Stringはリストに格納されるデータの型を表し、ArrayListは作成したいオブジェクトの型を指します。
ArrayListはJavaのutilライブラリに含まれているため、コードの先頭でインポートする必要があります。
なお、プリミティブ型(基本データ型)ではArrayListを作成できない点に注意してください。例えば整数のArrayListを宣言したい場合、プリミティブ型のintは使えず、Integerクラス(ラッパークラス)を使用する必要があります。
また、ArrayListにいくつの値を格納するかを指定していないことにお気づきでしょうか。これは、ArrayListが動的にサイズを管理しているためです。
ArrayListへの要素追加方法
add()メソッドを使うと、リストに要素を1つずつ追加できます。例えば、「songs」というArrayListにビートルズの楽曲「Love Me Do」と「Help!」の2曲を追加してみましょう。
新しいJavaファイルを開いて、以下のコードを記述してください。
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
System.out.println("Songs: " + songs);
}
}
このコードの出力結果は以下の通りです。
Songs: [Love Me Do, Help!]
通常の配列と同様に、ArrayList内の各項目にもインデックス番号が割り当てられます。ArrayList内の項目は順序付けられており、番号によってプログラムが各項目の並び順を認識します。必要に応じて、項目を挿入するインデックス位置を指定することもできます。
songs.add(0, "Love Me Do");
このように書くと、「Love Me Do」がインデックス0の位置に追加されます。
ArrayListの初期化方法
通常の配列を宣言するときは、代入したい値を直接指定して初期化できます。しかし、ArrayListはこの方法では初期化できません。代わりに、ArraysクラスのasList()という特別なメソッドを使う必要があります。asList()は、ArrayListクラスが読み取れる形式のリストとして配列を返します。
すでに追加したい値が決まっている場合は、ArrayListを初期値付きで初期化すると便利です。
forループを使って各項目を個別に追加することもできますが、asList()で初期化する方法の方がシンプルで効率的です。
まず、コードで使用するライブラリをインポートしましょう。
import java.util.ArrayList; import java.util.Arrays;
次に、songsというArrayListを2つの値で初期化するクラスを記述します。
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList(Arrays.asList("Love Me Do", "Help!"));
System.out.println("Songs: " + songs);
}
}
このコードでは、文字列を格納できるArrayListを宣言し、asList()を使って前の例と同じビートルズの楽曲2つをデフォルト値として初期化しています。
ArrayListから要素を取得する方法
ArrayListクラスにはget()という便利なメソッドがあり、これを使うとリストの要素にアクセスできます。このメソッドを使う際は、アクセスしたい要素のインデックス位置を指定します。
以下の例を見てみましょう。
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
System.out.println("Second song: " + songs.get(1));
}
}
このコードでは、ArrayListを作成して2つの値を追加した後、songs.get(1)を使ってインデックス1の位置にある曲を取得しています。出力結果は以下の通りです。
Second song: Help!
ArrayListの更新方法
ArrayListの更新は、要素の追加と同じくらい簡単です。set()という組み込みメソッドを使うと、リストに格納されている値を変更できます。以下のコードを見てください。
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
System.out.println("Songs: " + songs);
songs.set(1, "Come Together");
System.out.println("Songs: " + songs);
}
}
このコードの出力結果は以下の通りです。
Songs: [Love Me Do, Help!]
Songs: [Love Me Do, Come Together]
このコードでは、まず「Love Me Do」と「Help!」の2つの値をリストに追加しています。次に、set()メソッドでインデックス1の項目を「Come Together」に変更しました。これにより、リスト内の「Help!」が「Come Together」に置き換えられます。プログラムの最後でリストを出力すると、内容が更新されていることが確認できます。
ArrayListから要素を削除する方法
要素は永遠にArrayListの中に残るわけではありません。remove()メソッドを使えば、いつでも要素を削除できます。とても覚えやすいメソッド名ですね。
以下の例を見てみましょう。
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
System.out.println("Songs: " + songs);
String removed = songs.remove(0);
System.out.println("Songs: " + songs);
System.out.println(removed);
}
}
この例では、まずArrayListに2つの項目を追加し、次にインデックス0の項目を削除しています。出力結果は以下の通りです。
Songs: [Love Me Do, Help!]
Songs: [Help!]
Love Me Do
「Love Me Do」がArrayListから削除されました。remove()メソッドは削除された項目の名前を返すため、それを変数removedに代入しています。プログラムの最後で、この変数の値をコンソールに出力しています。
ArrayListの繰り返し処理(イテレーション)
ArrayListをループ処理したい場合はどうすればよいのでしょうか。forループまたは拡張forループ(for-eachループ)のどちらでも対応でき、好みに応じて選択できます。
例えば、リスト内のすべての楽曲をコンソールに出力し、それぞれの値を改行して表示したいとしましょう。以下のコードで実現できます。
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
for (int i = 0; i < songs.size(); i++) {
System.out.println(songs.get(i));
}
}
}
このプログラムでは、forループを使ってArrayList内のすべての項目を反復処理しています。リスト内の各項目に対して、コンソールに1行ずつ出力していきます。このループは、リスト内のすべての項目が出力されるまで続きます。
ここでsongs.size()というメソッドを使っていることに注目してください。size()メソッドは、ArrayListに格納されている値の数を返します。
このコードの出力結果は以下の通りです。
Love Me Do
Help!
同様に、拡張forループ(for-eachループ)を使ってArrayListを反復処理することもできます。for-eachループは、反復可能なオブジェクトであれば何でも処理できるためです。以下の例を見てください。
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
ArrayList<String> songs = new ArrayList<>();
songs.add("Love Me Do");
songs.add("Help!");
for (String song : songs) {
System.out.println(song);
}
}
}
このプログラムも構造も目的もほぼ同じで、songsというArrayList内のすべての値をコンソールに出力します。違いは、拡張forループを使って各値を反復処理している点です。
拡張forループの方が読みやすいという理由で、通常のforループの代わりに使う開発者もいますが、どちらの方法でも問題なく動作します。
まとめ
JavaのArrayListクラスを使えば、事前に格納する値の数を指定せずに、複数の値を格納できる配列を定義できます。
今回はJavaでのArrayListの使い方の基礎を学びました。さらに理解を深めたい方は、以下のトピックも参考にしてください。
- ArrayListから配列への変換方法
- ArrayListの初期化方法の詳細
- ArrayListのソート方法
これで、配列にいくつの値が必要になるかわからない場合でも心配ありません。ArrayListを使えば、この問題を簡単に解決できます!
-
Javaの配列におけるデフォルト値とは?各データ型の初期値をサンプルコード付きで解説
Javaには、同じ型の要素を固定サイズで連続的に格納できるデータ構造「配列(array)」が用意されています。配列は複数のデータをまとめて管理するために使われますが、実質的には「同じ型の変数を集めたもの」と考えると理解しやすくなります。 ここで重要なのが、配列を生成した際に要素を明示的に初期化しなくても、JVMが自動的にデフォルト値を割り当ててくれるという仕様です。そのため、newで配列を作成した直後でも、未初期化の状態のまま安全に各要素へアクセスできます。 データ型ごとのデフォルト値一覧 主なデータ型のデフォルト値は以下の通りです。 boolean … false byte / shor
-
JavaでList(リスト)を配列に変換する方法|toArray()とArrays.asList()の使い方
Javaの開発において、List(リスト)と配列(Array)の相互変換は非常によく使われる基本的な操作です。 Listを配列に変換する最も簡単かつ推奨される方法は、.toArray()メソッドを使うことです。逆に、配列をListに戻したい場合は、Arrays.asList()メソッドを使用します。 以下では、文字列(String)のListや整数(Integer)のListを、それぞれ対応する配列に変換する具体例を紹介します。 String型のListを配列に変換する import java.util.ArrayList; import java.util.List; public cl