[英]Whats the difference between List<String> stringList = new ArrayList<String>() and List<String> stringList = new ArrayList()?
[英]Is there a difference between List<String> A = new ArrayList<String> ( ) and ArrayList<String> A = new ArrayList<String>()?
String[] somestringarray = { "a","b","c"};
也,
List<String> A = new ArrayList<String>(Arrays.asList(somestringarray));
是Arrays.asList()
的集合? 并且该语句正在初始化somestringarray
大小的somestringarray
?
为什么我不能只拥有somestringarray
? 声明字符串列表有什么意义,仅使用somestringarray
有什么问题?
数组是Java语言的基本组成部分,没有collections框架提供的任何出色功能:no contains
,固定大小,不可避免的可变性,等等。
Arrays.asList
返回一个特殊的List
实现,它只是传递给它的数组的包装:它支持set
, contains
,迭代等所有内容,尽管它不支持add
或remove
。 但是,它可以传递给期望使用Collection
许多实用程序,因为Arrays.asList
确实返回一个List
,该List
始终是Collection
。
该声明
List<String> A = new ArrayList<String>(Arrays.asList(somestringarray));
首先,将数组包装为List
,但是是一种不支持调整大小的有限实现。 (此外, List
反映您对变化somestringarray
,并更改List
由返回Arrays.asList
实际上会改变支持数组为好。) 然后 ,它会复制到一个ArrayList
,这是一个全功能的List
实施支持调整大小等,并且由于它制作了副本,因此它现在与原始数组无关。
Java数组不是动态数据结构。 一旦初始化,就无法调整大小。 而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.
在初始化arr
时添加“ c”而不将其复制到新数组中,
String[] t = new String[arr.length + 1];
System.arraycopy(arr, 0, t, 0, arr.length);
t[t.length - 1] = "c";
arr = t;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.