Java ArrayListの使い方のサンプル

JavaのArrayListクラスの使い方のサンプルです。

目次

ArrayListクラス

public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable

java-ArrayList

  • 1つの変数で同じ型の複数の値を保持できます。
    →各項目を要素(element)といいます。
    →StringやIntegerなどのオブジェクトの参照を保持します。intなどの基本型は使用できません。
  • 要素の順序は、インデックス(添字)で管理します。
    →上記図では[0]、[1]、[2]、[3]がインデックスです。
    →インデックスは0から始まります。
    →要素にアクセスする際は、インデックスを使用するのでランダムアクセス(特定の要素へのアクセス)は速いです。
    →内部的に配列を使用しています。
     Java 配列の仕組みと使い方のサンプル
    →値の重複は可能です。
  • サイズをあとから動的に変更できます。(配列は不可)
    要素の挿入や削除は、要素の移動が発生するため遅いです。
  • スレッドセーフではありません。
  • 以下はOracleのJava8 API仕様のArrayListクラスのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/util/ArrayList.html

Listインターフェース

public interface List<E> extends Collection<E>

  • ArrayListクラスはListインターフェースを実装しています。
  • ArrayListクラスをインスタンス化する時、ArrayListクラスの独自のメソッドを使用しない限り、通常Listインターフェイス型の変数に代入します。
  • ArrayListクラスは、Listインターフェースを実装しているので、Listインターフェイスにあるメソッドを使用できます。
  • 以下はOracleのJava8 API仕様のListインターフェースのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/util/List.html

要素を追加する (addメソッド)

public boolean add(E e)
public void add(int index,E element)

要素を追加するサンプルです。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
    public static void main(String[] args) {
        
        List<String> color = new ArrayList<>();
        
        color.add("赤");
        color.add("黄");
        color.add("青");
        System.out.println(color);//[赤, 黄, 青]

        color.add(2,"オレンジ");
        System.out.println(color);//[赤, 黄, オレンジ, 青]
    }
 }

8行目は、ArrayListクラスをインスタンス化してListインターフェイス型の変数に代入しています。ジェネリクス<>でオブジェクトの中身はStringであると宣言しています。
10~12行目は、addメソッドで要素を末尾に追加しています。
15行目は、位置を指定して要素を追加しています。最初の位置は0から始まります。

 

要素の位置を指定して要素を取得する (getメソッド/拡張for文)

public E get(int index)

要素の位置を指定して要素を取得するサンプルです。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
	public static void main(String[] args) {
		
		List<String> color = new ArrayList<>();
		color.add("赤");
		color.add("黄");
		color.add("青");
		
		System.out.println(color.get(1)); //黄
		
        for (String a : color) {
            System.out.println(a);//赤 黄 青
        }
	}
 }

13行目は、getメソッドで要素の位置を指定して要素を取得しています。
要素の位置は、赤=0、黄=1、青=2です。
15行目は、拡張for文で各値を取得しています。

 

要素の位置を指定して要素を置き換える (setメソッド)

public E set(int index,E element)

要素の位置を指定して要素を置き換えるサンプルです。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
	public static void main(String[] args) {

		List<String> color = new ArrayList<>();
		color.add("赤");
		color.add("黄");
		color.add("青");
		
		color.set(1, "紫");
		System.out.println(color); //[赤, 紫, 青]
	}
 }

13行目は、setメソッドで要素の位置を指定して要素を置き換えています。
要素の位置は、赤=0、黄=1、青=2です。

 

要素数を取得する (sizeメソッド)

public int size()

要素数を取得するサンプルです。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
	public static void main(String[] args) {

		List<String> color = new ArrayList<>();
		color.add("赤");
		color.add("黄");
		color.add("青");
		
		System.out.println(color.size()); //3
	}
 }

13行目は、sizeメソッドで要素数を取得しています。

 

要素を指定して要素の位置を取得する (indexOfメソッド)

public int indexOf(Object o)

要素を指定して要素の位置を取得するサンプルです。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
	public static void main(String[] args) {

		List<String> color = new ArrayList<>();
		color.add("赤");
		color.add("黄");
		color.add("青");
		
		System.out.println(color.indexOf("黄")); //1
	}
 }

13行目は、indexOfメソッドで要素を指定して要素の位置を取得しています。
要素の位置は、赤=0、黄=1、青=2です。

 

指定の要素があるかを返す (containsメソッド)

public boolean contains(Object o)

指定の要素があるかを返すサンプルです。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
	public static void main(String[] args) {

		List<String> color = new ArrayList<>();
		color.add("赤");
		color.add("黄");
		color.add("青");
		
		System.out.println(color.contains("青")); //true
	}
 }

13行目は、containsメソッドで指定の要素があるかを取得しています。
ある場合trueです。

 

中身が空かを返す (isEmptyメソッド)

public boolean isEmpty()

中身が空かを返すサンプルです。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
	public static void main(String[] args) {

		List<String> color = new ArrayList<>();
		color.add("赤");
		color.add("黄");
		color.add("青");
		
		System.out.println(color.isEmpty()); //false
	}
 }

13行目は、isEmptyメソッドで中身が空か取得しています。
空の場合trueです。

 

要素の位置を指定して要素を削除する (removeメソッド)

public E remove(int index)

要素の位置を指定して要素を削除するサンプルです。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
	public static void main(String[] args) {

		List<String> color = new ArrayList<>();
		color.add("赤");
		color.add("黄");
		color.add("青");
		
		color.remove(0);
		System.out.println(color); //[黄, 青]
	}
 }

13行目は、removeメソッドで要素の位置を指定して要素を削除しています。
要素の位置は、赤=0、黄=1、青=2です。

 

すべての要素を削除する (clearメソッド)

public void clear()

すべての要素を削除するサンプルです。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
	public static void main(String[] args) {

		List<String> color = new ArrayList<>();
		color.add("赤");
		color.add("黄");
		color.add("青");
		
		color.clear();
		System.out.println(color); //[]
	}
 }

13行目は、clearメソッドですべての要素を削除しています。

 

リストを連結する (addAllメソッド)

public boolean addAll(Collection<? extends E> c)

リストを連結するサンプルです。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
    public static void main(String[] args) {
        
        List<String> a1 = new ArrayList<>();
        a1.add("a");
        a1.add("b");
        
        List<String> b1 = new ArrayList<>();
        b1.add("あ");
        b1.add("い");
        
        a1.addAll(b1);
        
        for (String a : a1) {
            System.out.println(a);//a b あ い
        }
    }
 }

16行目は、addAllメソッドでリストを連結しています。

 

メソッドの引数と戻り値がリストの場合

メソッドの引数と戻り値がリストの場合のサンプルです。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
    public static void main(String[] args) {
        List<String> color = new ArrayList<>();
        color.add("赤");
        color.add("黄");
        color.add("青");
        
        List<String> b = getColor(color);
    }

    private static List<String> getColor(List<String> c1) {

    	for (String a : c1) {
        	System.out.println(a);//赤 黄 青
        }
        return c1;
    }
}

12行目は、呼び出し元のメソッドです。引数(実引数)にリストを指定しています。戻り値もリストです。
15行目は、定義されたメソッドです。引数(仮引数)にリストがあります。戻り値もリストです。
・「getColor(List<String> c1)」のList<String> c1が引数の型と変数です。
・「private static List<String>」のList<String>が戻り値の型です。

呼び出し元のメソッドの引数の変数名(12行目のcolor)と定義されたメソッドの引数の変数名(15行目のc1)は異なっていても使用できます。

 

リストの中にリストがあるサンプル

リストの中にリストがあるサンプルです。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
    public static void main(String[] args) {
        List<List<String>> list1 = new ArrayList<>();
        
        List<String> list2 = new ArrayList<>();
        list2.add("赤");
        list2.add("黄");
        list2.add("青");
        
        List<String> list3 = new ArrayList<>();
        list3.add("red");
        list3.add("yellow");
        list3.add("blue");
        
        list1.add(list2);
        list1.add(list3);
        
        System.out.println(list1.get(0)); //[赤, 黄, 青]
        System.out.println(list1.get(0).get(0)); //赤
        System.out.println(list1.get(0).get(1)); //黄
        System.out.println(list1.get(0).get(2)); //青
        System.out.println(list1.get(1).get(0)); //red    
        System.out.println(list1.get(1).get(1)); //yellow
        System.out.println(list1.get(1).get(2)); //blue
    }
}

7行目は、リストの中にリストを定義しています。
9~12と14~17行目は、通常のリストを作成しています。
19,20行目は、リストにリストを追加しています。
22~28行目は、getメソッドでリストの値を取得しています。

 

要素を順番に処理する(forEachメソッド)

public void forEach(Consumer<? super E> action)

要素を順番に処理するサンプルです。forEachメソッドは、Java8で導入されました。

package test1;
import java.util.ArrayList;
import java.util.List;

public class Test1 {
    public static void main(String[] args) {
        
        List<String> color = new ArrayList<>();
        color.add("赤");
        color.add("黄");
        color.add("青");
        
        color.forEach(a -> System.out.println(a));//赤 黄 青
        color.forEach(System.out::println);//赤 黄 青
    }
 }

13行目は、forEachメソッドでリストの各値を取得しています。変数a以降はラムダ式です。
Java ラムダ式のサンプル
14行目のSystem.out::printlnは、メソッド参照です。13行目と同じ意味です。

以下は、OracleのArrayListクラスのforEachメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/ArrayList.html#forEach-java.util.function.Consumer-

 

リストから配列を作成する(toArrayメソッド)

public <T> T[ ] toArray(T[ ] a)

リストから配列を作成するサンプルです。

package test1;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test1 {
    public static void main(String[] args) {
        
        List<String> color = new ArrayList<>();
        color.add("赤");
        color.add("黄");
        color.add("青");
        
        //以下は配列です
        String[] array1 = new String[3];
        
        // リストから配列を作成
        color.toArray(array1);
     		
        System.out.println
        (Arrays.toString(array1));//[赤, 黄, 青]
    }
 }

9~12行目は、リストを作成しています。
15行目は、配列で中身は空です。
18行目は、toArrayメソッドでリストの値を配列にセットしています。
21行目は、配列の値を表示しています。

配列を変更しても元のリストは変更されません。
リストを変更しても配列は変更されません。

リストより配列が多い場合、配列の余った要素にはnullがセットされます。
リストより配列が少い場合、配列には、nullが1つセットされます。

ArrayListの初期容量(サイズ)

ArrayList(int initialCapacity)

ArrayListの要素数の初期容量(サイズ)のデフォルト値は10です。
要素が追加されていくと自動的に拡張されていきます。

初期容量(サイズ)は設定することができます。
以下は初期容量(サイズ)を30とした場合です。

List<String> color = new ArrayList<>(30);

関連の記事

Java ArrayListの要素をソートするサンプル(Collectionsクラス)
Java 配列からリストを作成する(addAll/asListメソッド)
Java LinkedListの使い方のサンプル

△上に戻る