String[] somestringarray = { "a","b","c"};
另外,
List<String> A = new ArrayList<String>(Arrays.asList(somestringarray));
是Arrays.asList()
一个集合?该声明正在初始化somestringarray
的大小列表?
为什么我不能somestringarray
?声明字符串列表有什么意义,只有somestringarray
会出错?
答案 0 :(得分:3)
数组非常简单,是Java语言的基本组件,没有集合框架提供的任何好的功能:没有contains
,固定大小,不可避免地可变,等等。
Arrays.asList
返回一个特殊的List
实现,只是传递给它的数组的包装器:它支持set
,contains
,迭代,所有这些,虽然它不支持add
或remove
。它可以传递给期望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不是动态数据结构;一旦初始化,他们就无法调整大小。而List
是Collection
接口,而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;