在Java中把数组转换为列表

如何在Java中把一个数组转换为一个列表?

我使用了Arrays.asList(),但行为(和签名)不知为何从Java SE 1.4.2 (现在文档在存档中)变为8,而我在网上找到的大多数片段都使用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);
解决办法

在你的例子中,这是因为你不可能有一个原始类型的List。换句话说,List是不可能的。

然而,你可以使用包装了 "int "基元的Integer类来建立一个 "List"。用Arrays.asList实用方法将你的数组转换为List

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

请看这个代码在IdeOne.com现场运行

评论(16)

问题是Java5中引入了varargs,不幸的是,Arrays.asList()也被重载为vararg版本。所以Arrays.asList(spam)被Java5编译器理解为int数组的vararg参数。

这个问题在Effective Java第二版第7章第42项中有更详细的解释。

评论(2)

你必须投到数组中去

Arrays.asList((Object[]) array)
评论(2)