使用asList的目的是什么?

时间:2011-07-31 19:01:32

标签: java list exception arraylist

我只是想知道Arrays中方法asList()的好处和目的是什么。

它返回一个由指定数组支持的固定大小的列表,因此我们无法向该列表添加元素,它就像一个数组(我们不能向它添加元素)。有没有办法将固定大小的列表转换为非固定大小的列表?

当我尝试将元素添加到固定大小列表时,它会抛出UnsupportedOperationException

Double[] d = {3.0, 4.0, 5.0};
List<Double> myList = Arrays.asList(d);
myList.add(6.0); // here it will throw an exception

6 个答案:

答案 0 :(得分:11)

来自java docs:

“此方法充当基于数组的API和基于集合的API之间的桥梁”

对于你的问题;

Double[] d = {3.0, 4.0, 5.0};
List<Double> yourList = new ArrayList(Arrays.asList(d));
yourList.add(6.0);

答案 1 :(得分:4)

用于需要List(或List的某个超级接口,例如CollectionIterable)作为参数的其他方法。即,

Double[] doubles = { 0d, 1d, 2d };
//... somewhere ...
someMethodThatRequiresAList(Arrays.asList(doubles));
//... elsewhere that you can't change the signature of ...
public void someMethodThatRequiresAList(List<Double> ds) { /* ... */ };

答案 2 :(得分:3)

您无法将其转换为可变大小列表,但您可以创建一个新列表:

List<Double> myOtherList = new ArrayList<Double>(myList);
myOtherList.add(6.0);

另外,请注意myList是数组上的视图。所以如果你改变了数组

   d[0] = 0.0;
   System.out.println(myList);

你会得到[0.0,4.0,5.0]

在许多情况下,固定大小的列表会很好,但当然这取决于你在做什么。我个人倾向于在测试用例中大量使用Arrays.asList。

答案 3 :(得分:2)

只是一些评论,java doc说明了一切:

public static <T> List<T> asList(T... a)

Returns a fixed-size list backed by the specified array.

在下面,asList返回一个Array.ArrayList实例,该实例与java.util.ArrayList不同。允许您修改列表的唯一方法是:

public E set(int index, E element) {...}

答案 4 :(得分:1)

来自javadocs:

  

此方法充当基于阵列和基于集合的桥梁   API,与Collection.toArray()。

结合使用

因此,如果您希望能够将数组传递给期望Collection的方法,这提供了一种方便的方法。

答案 5 :(得分:1)

它用于以List创建数组的视图,因此您可以将其传递给接受List / Collection的多种方法。