Java ArrayListの使い方のサンプル

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

目次

ArrayListクラス

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

Listインターフェース

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

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

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

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

public class Test1 {
    public static void main(String[] args) {
        
        List<String> colors = new ArrayList<>();
        
        colors.add("赤");
        colors.add("黄");
        colors.add("青");
        
        for (String a : colors) {
            System.out.println(a);//赤 黄 青
        }
        
        colors.add(2,"オレンジ");
        
        for (String a : colors) {
            System.out.println(a);//赤 黄 オレンジ 青
        }
    }
 }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 あ い
        }
    }
 }

メソッドの引数がリストのサンプル

メソッドの引数がリストのサンプルです。
12行目は、呼び出し元のメソッドの引数(実引数)にリストを指定しています。
15行目は、定義されたメソッドの引数(仮引数)にリストがあります。
呼び出し元のメソッドの引数の変数名と定義されたメソッドの引数の変数名は異なっていても使用できます。

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

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

        List<Integer> num1 = new ArrayList<>();
        num1.add(1);
        num1.add(2);
        num1.add(3);
        getCnt(num1);
    }

    private static void getCnt(List<Integer> n) {

        for (int a : n) {
            System.out.println(a); // 1 2 3
        }
    }
}

メソッドの戻り値がリストのサンプル

メソッドの戻り値がリストのサンプルです。
8行目は、呼び出し元のメソッドです。戻り値の変数の型がリストになっています。
14行目は、定義されたメソッドです。戻り値の変数の型がリストにになっています。

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

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

        List<Integer> num1 = getNum();
        for (int a : num1) {
            System.out.println(a); // 1 2 3
        }
    }

    private static List<Integer> getNum() {
        
        List<Integer> n = new ArrayList<>();
        n.add(1);
        n.add(2);
        n.add(3);
        return n;
    }
}

ArrayListの初期容量(サイズ)

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

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

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

要素をソートするサンプル(Collectionsクラス)

要素をソートするサンプルです。
Collectionsクラスを使用します。

14行目は、Collectionsクラスのsortメソッドです。昇順でソートしています。
20行目は、Collectionsクラスのreverseメソッドです。降順でソートしています。
31,37行目は、文字列をソートしています。

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

public class Test1 {
    public static void main(String[] args) {
    	
        List<Integer> num1 = new ArrayList<>();
        num1.add(211);
        num1.add(35);
        num1.add(6711);
        
        Collections.sort(num1);
        
        for (Integer a : num1) {
            System.out.println(a);//35 211 6711
        }
        
        Collections.reverse(num1);
        
        for (Integer a : num1) {
            System.out.println(a);//6711 211 35
        }
        
        List<String> colors = new ArrayList<>();
        colors.add("b");
        colors.add("a");
        colors.add("c");
        
        Collections.sort(colors);
        
        for (String a : colors) {
            System.out.println(a);//a b c
        }
        
        Collections.reverse(colors);
        
        for (String a : colors) {
            System.out.println(a);//c b a
        }
    }
 }

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

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

13-15行目は、for文で要素の値を順番に表示しています。
17行目は、forEachメソッドとラムダ式です。
Java ラムダ式のサンプル
19行目は、forEachメソッドとメソッド参照です。
やり方はそれぞれ違いますが同じ結果になります。

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

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

関連の記事

Java LinkedListの使い方のサンプル
Java HashMapの使い方のサンプル
Java LinkedHashMapの使い方のサンプル
Java TreeMapの使い方のサンプル
Java HashSetの使い方のサンプル
Java 配列/コレクションの値をループで取得するサンプル(拡張for文)
Java リストから配列を作成するサンプル(ArrayList)
Java 配列からリストを作成するサンプル(Arraysクラス)
Java 配列からリストを作成するサンプル(Collectionsクラス)



△上に戻る