我只是想知道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
答案 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
的某个超级接口,例如Collection
或Iterable
)作为参数的其他方法。即,
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
的多种方法。