从数组填充列表的不同方法

时间:2013-05-09 16:21:32

标签: java

这两种初始化方式有什么区别:

List<String> list = new ArrayList<String>(Arrays.asList(arr));

List<String> list = Arrays.asList(arr);

我能说的一件事是,在后一种情况下,我们没有使用ArrayList类。但是,我们在这里创建了哪个类的对象(列表)?

4 个答案:

答案 0 :(得分:8)

第一个创建一个可变List,第二个是固定大小。 ArrayList不是List的唯一实现。 Arrays.asList返回其自身的固定大小的实现,即可以更新单个元素,但不能添加或删除元素。

答案 1 :(得分:2)

我看到的唯一区别是第二个会创建一个不可变的List对象。

答案 2 :(得分:1)

List<String> list = Arrays.asList(arr);

Arrays.asList(arr)返回由arr String类型数组支持的固定大小列表。它没有实现添加或删除方法(正如规范中所说的是固定大小列表)。

所以,如果你想添加类似这样的东西

list.add("StackOverflow")

您将收到 UnsupportedOperationException(抛出以指示不支持所请求的操作。),因为返回的列表具有修复大小。

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/UnsupportedOperationException.html

List<String> list = new ArrayList<String>(Arrays.asList(arr));

new ArrayList<String>(Arrays.asList(arr))返回一个列表,其中包含由arr String类型数组支持的固定大小列表的元素,按照集合迭代器返回的顺序返回。

所以,如果您尝试添加类似这样的内容

list.add("StackOverflow")

然后会添加差异。

答案 3 :(得分:0)

对于第一个将列表 arr 传递给返回List的静态方法 asList ,然后创建一个新的ArrayList,并将该方法的结果作为a构造函数参数。

对于第二个,您直接使用静态方法的结果作为对象。