在Java中将数组转换为列表
如何将数组转换为Java中的列表?
我使用了Arrays.asList()
但行为(和签名)以某种方式从Java SE 1.4.2(现在存档的文档)更改为8,并且我在网上找到的大多数代码片段都使用1.4.2行为。
例如:
int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
在很多情况下,应该很容易发现,但有时可能会被忽视:
Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
在你的例子中,这是因为你不能有一个基本类型的列表。 换句话说, List<int>
是不可能的。 但是,您可以有一个List<Integer>
。
Integer[] spam = new Integer[] { 1, 2, 3 };
Arrays.asList(spam);
这按预期工作。
问题在于,可变参数引入了Java5,不幸的是, Arrays.asList()
也使用了可变参数版本。 所以Arrays.asList(spam)
被Java5编译器理解为int数组的可变参数。
有效Java第2版,第7章,第42项更详细地解释了这个问题。
谈到转换方式,这取决于你为什么需要你的List
。 如果你只是需要它来读取数据。 好的,在这里你去:
Integer[] values = { 1, 3, 7 };
List<Integer> list = Arrays.asList(values);
但是,如果你做这样的事情:
list.add(1);
你得到java.lang.UnsupportedOperationException
。 所以在某些情况下,你甚至需要这样做:
Integer[] values = { 1, 3, 7 };
List<Integer> list = new ArrayList<Integer>(Arrays.asList(values));
第一种方法实际上并不转换数组,而是像“ List
”那样“代表”它。 但是数组的所有属性都像固定数量的元素一样。 请注意,您在构建ArrayList
时需要指定类型。