Javaで配列をリストに変換する

Javaで配列をリストに変換するにはどうしたらいいですか?

私はArrays.asList()を使用していましたが、Java SE 1.4.2 (docs now in archive)から[8][2]に動作(および署名)が何らかの形で変更され、ウェブ上で見つけたほとんどのスニペットは1.4.2の動作を使用しています。

例えば

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • 1.4.2 では、1, 2, 3 の要素を含むリストを返します。
  • 1.5.0+では、配列spamを含むリストを返します。

多くの場合、発見するのは簡単なはずですが、気づかれないままになってしまうこともあります。

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);

[2]: https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#asList-T...-

ソリューション

あなたの例では、プリミティブ型のListを持つことができないからです。つまり、Listは不可能なのです。

しかし、intプリミティブをラップした[Integer][1]クラスを使えば、Listを作ることができます。Arrays.asList](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Arrays.html#asList(T...))ユーティリティーメソッドを使用して,配列を[`List`][2]に変換します

Integer[] spam = new Integer[] { 1, 2, 3 };
List list = Arrays.asList(spam);

この code run live at IdeOne.com をご覧ください。

[1]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Integer.html

解説 (16)

問題は、Java5でvarargsが導入され、残念ながら、Arrays.asList()もvarargバージョンでオーバーロードされてしまったことです。そのため、Java5のコンパイラは、Arrays.asList(spam)をint型配列のvarargパラメータとして理解してしまいます。

この問題については,Effective Java 2nd Ed.の第7章,Item 42で詳しく説明されています。

解説 (2)

配列するにはキャストインしなければなりません。

Arrays.asList((Object[]) array)
解説 (2)