List <string> A = new ArrayList <string>()和ArrayList <string> A = new ArrayList <string>()?</string> </string> </string> </string>

时间:2014-12-16 22:37:02

标签: java arrays string arraylist

String[] somestringarray = { "a","b","c"};

另外,

List<String> A = new ArrayList<String>(Arrays.asList(somestringarray));

Arrays.asList()一个集合?该声明正在初始化somestringarray的大小列表?

为什么我不能somestringarray?声明字符串列表有什么意义,只有somestringarray会出错?

2 个答案:

答案 0 :(得分:3)

数组非常简单,是Java语言的基本组件,没有集合框架提供的任何好的功能:没有contains,固定大小,不可避免地可变,等等。

Arrays.asList返回一个特殊的List实现,只是传递给它的数组的包装器:它支持setcontains,迭代,所有这些,虽然它不支持addremove。它可以传递给期望Collection的许多实用程序,但是,因为Arrays.asList 确实返回List,它始终是Collection

声明

List<String> A = new ArrayList<String>(Arrays.asList(somestringarray));

首先将数组包装为List,但是不支持调整大小的有限实现。 (另外,List反映了您对somestringarray所做的更改,List返回的Arrays.asList的更改实际上也会更改后备数组。)然后,它将其复制到ArrayList,这是一个功能齐全的List实现,支持调整大小等,并且由于它复制它现在独立于原始数组。< / p>

答案 1 :(得分:1)

Java Arrays不是动态数据结构;一旦初始化,他们就无法调整大小。而ListCollection接口,而ArrayList是由数组支持的List

List<String> al = new ArrayList<>(Arrays.asList("a", "b"));
al.add("c");

使用数组,您需要

String[] arr = {"a","b"};
// can't add "c" now.

添加&#34; c&#34;初始化arr而不将其复制到新数组时

String[] t = new String[arr.length + 1];
System.arraycopy(arr, 0, t, 0, arr.length);
t[t.length - 1] = "c";
arr = t;