【Java】ArrayListとは - 使い方を解説
- 作成日:2022/11/05
配列と似ているArrayListについて解説します。
ArrayListとは
ArrayListとは複数のデータを管理できるクラスです。配列と似ています。 配列は要素数が固定で、要素の追加・削除はできませんが、ArrayListは要素の追加や削除ができます。
なので、最初から要素数が決まっていて将来的にも要素数を変更しないのであれば配列を使うと良いでしょう。 一方、要素数が動的に変わったりする場合はArrayListを使うのが良いですね。
ArrayListの仕様はこちらで確認できますが、 基本的な使い方などを簡単に解説します。
ArrayListの宣言
ArrayListの簡単なサンプルです。まずは宣言の仕方です。 「java.util.ArrayList」と「import java.util.List」のインポートを忘れずにしておきましょう。
import java.util.ArrayList;
import java.util.List;
public class TestJava {
public static void main(String[] args) {
//ArrayList型で作成
ArrayList<Integer> list = new ArrayList<>();
//List型で作成
List<Integer> list2 = new ArrayList<>();
}
}
右辺のnew演算子でArrayListクラスのインスタンスを生成して、それを左辺の変数に入れています。 左辺の型の横にジェネリクスを使ってデータの型を指定します。 この例ではInteger型を指定しているので、数値のリストができるわけです。
また、10行目では右辺の変数の型がArrayList型なのに対して、13行目ではList型です。 ArrayListはListインターフェースを継承しているので、List型としても扱えるわけです。 どちらの型でも間違いではないのですが、汎用性があるList型と書くことが多い感じがしますが、 ケースバイケースで使い分けるのが良いでしょう。
将来的にArrayList型を、List継承した別の型に変更する場合はList型にしておくと便利です。 一方、ArrayList型にしかないメソッドを使う場合はArrayList型にしましょう。
要素の追加(add)
要素の追加はaddメソッドを使います。
import java.util.ArrayList;
import java.util.List;
public class TestJava {
public static void main(String[] args) {
//リストの作成
List<Integer> list = new ArrayList<>();
//末尾に要素を追加する
list.add(100);
list.add(200);
//指定した位置に要素を追加する
list.add(0,500);
list.add(1,600);
}
}
要素を追加するaddメソッドは2通りの使い方があります。 リストの末尾に要素を入れたい場合は14,15行目のように、引数に追加したいデータのみを渡します。
一方、指定した位置に要素を追加したい場合は、位置とデータの両方を引数に渡します。 追加したい位置はインデックス番号で指定するので、 18行目はリストの0番目(先頭)に500という値を追加しています。
要素を追加すると既存の要素は1つずつ後ろにずれていきます。
public boolean add(E e)
指定した要素を末尾に追加する
- 追加する要素
- true
public void add(int index,E element)
指定した要素を指定した位置に追加する
- index:追加するリストのインデックス
- element:追加する要素
- true
なお、どちらのaddメソッドも宣言した型とは違う型の値を入れようとするとエラーになります。
要素の取得(get)
要素の取得はgetメソッドを使います。
import java.util.ArrayList;
import java.util.List;
public class TestJava {
public static void main(String[] args) {
//リストの作成
List<Integer> list = new ArrayList<>();
//要素を追加する
list.add(100);
list.add(200);
//要素を取得する
System.out.println(list.get(0));
System.out.println(list.get(1));
}
}
18,19行目でlistの要素を取得しています。 getメソッドの引数は要素のインデックス番号で指定します。 先頭の要素は0番目です。
public E get(int index)
指定した位置の要素を取得する
- 取得する要素のインデックス
- 取得した要素
要素の削除(remove)
要素の削除はremoveメソッドを使います。
import java.util.ArrayList;
import java.util.List;
public class TestJava {
public static void main(String[] args) {
//List型で作成
List<String> list = new ArrayList<>();
//末尾に要素を追加する
list.add("test1");
list.add("test2");
//位置を指定して削除する
list.remove(0);
//要素を指定して削除する
list.remove("test2");
}
}
removeメソッドも2通りの使い方があります。 19行目のように、引数にインデックス番号を指定するとその位置の要素を削除します。
一方、22行目のように削除したいデータそのものを指定すると、リスト内にその要素があると削除します。 複数存在した場合は、先頭から順に最初に見つけた要素を削除します。
要素を削除すると、既存の要素は1つ前につめる形になります。
public E remove(int index)
指定した位置の要素を削除する
- 削除する要素のインデックス
- リストから削除した要素
public boolean remove(Object o)
指定した要素を削除する
- 削除する要素
- 削除成功の場合はTrue
要素の置き換え(set)
要素の置き換えはsetメソッドを使います。
import java.util.ArrayList;
import java.util.List;
public class TestJava {
public static void main(String[] args) {
//List型で作成
List<String> list = new ArrayList<>();
//末尾に要素を追加する
list.add("test1");
list.add("test2");
//位置を指定して要素を置き換える
list.set(0,"test3");
}
}
setメソッドは位置した位置の要素を置き換えるときに使います。 19行目ではリストの0番目の要素を「test3」という文字列に置き換えています。
public E set(int index,E element)
指定した位置の要素を置き換える
- index:置き換える要素のインデックス
- element:置き換える要素
- 指定された位置に以前あった要素