タイトル
TOPJavaTIPS → This Page

Arrays.asListの注意点【Java の TIPS、小ネタ、注意点】

前提

Java開発におけるArraysクラスのasListメソッドの注意点を紹介します。
このページに記載している内容は2024/10/30に書かれたものです。
掲載している内容が将来的に変更されている場合があります。

Arrays.asListの使い方

Arrays.asListで複数の要素を一発でリストに出来ます。
import java.util.Arrays;
import java.util.List;

/**
 * Arrays.asListの問題確認サンプル1
 * 
 * @author みっちー
 */
public class ArraysAsList1 {
	/**
	 * メイン
	 * 
	 * @param args パラメータ
	 */
	public static void main(String[] args) {
		System.out.println("Arrays.asListの問題確認サンプル1");

		// リスト作成
		List<String> list = Arrays.asList("AAA", "BBB", "CCC");

		// 中身出力
		for (String val : list) {
			System.out.println(val);
		}
	}
}

実行結果
Arrays.asListの問題確認サンプル1
AAA
BBB
CCC

Arrays.asList利用での注意点

しかし、Arrays.asListで作ったリストに対して追加や削除を行うと・・・
import java.util.Arrays;
import java.util.List;

/**
 * Arrays.asListの問題確認サンプル2
 * 
 * @author みっちー
 */
public class ArraysAsList2 {
	/**
	 * メイン
	 * 
	 * @param args パラメータ
	 */
	public static void main(String[] args) {
		System.out.println("Arrays.asListの問題確認サンプル2");

		// リスト作成
		List<String> list = Arrays.asList("AAA", "BBB", "CCC");

		// リストの中身追加
		list.add("DDD");

		// リストの中身削除
		list.remove(0);

		// 中身出力
		for (String val : list) {
			System.out.println(val);
		}
	}
}

実行結果
Arrays.asListの問題確認サンプル2
Exception in thread "main" java.lang.UnsupportedOperationException
	at java.base/java.util.AbstractList.add(AbstractList.java:155)
	at java.base/java.util.AbstractList.add(AbstractList.java:113)
	at jp.mitchy_world.ArraysAsList2.main(ArraysAsList2.java:24)
ソース自体はビルドが通りますが実行時に例外が発生します。
なぜならArrays.asListは「固定長の」リストを返却するからです。
「固定長の」リストのためリストへの追加や削除が出来ないのです。

固定長が困る場合はリスト作成時にリストのコンストラクタ引数として渡してやれば解決出来ます。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Arrays.asListの問題確認サンプル3
 * 
 * @author みっちー
 */
public class ArraysAsList3 {
	/**
	 * メイン
	 * 
	 * @param args パラメータ
	 */
	public static void main(String[] args) {
		System.out.println("Arrays.asListの問題確認サンプル3");

		// リスト作成
		List<String> list = new ArrayList<>(Arrays.asList("AAA", "BBB", "CCC"));

		// リストの中身追加
		list.add("DDD");

		// リストの中身削除
		list.remove(0);

		// 中身出力
		for (String val : list) {
			System.out.println(val);
		}
	}
}

実行結果
Arrays.asListの問題確認サンプル3
BBB
CCC
DDD

更新履歴

2024/10/30 新規作成

TOPJavaTIPS → This Page