繁体   English   中英

清单之间有区别吗 <String> A =新的ArrayList <String> ()和ArrayList <String> A =新的ArrayList <String> ()?

[英]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实现,它只是传递给它的数组的包装:它支持setcontains ,迭代等所有内容,尽管它不支持addremove 但是,它可以传递给期望使用Collection许多实用程序,因为Arrays.asList 确实返回一个List ,该List始终是Collection

该声明

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

首先,将数组包装为List ,但是是一种不支持调整大小的有限实现。 (此外, List反映您对变化somestringarray ,并更改List由返回Arrays.asList实际上会改变支持数组为好。) 然后 ,它会复制到一个ArrayList ,这是一个全功能的List实施支持调整大小等,并且由于它制作了副本,因此它现在与原始数组无关。

Java数组不是动态数据结构。 一旦初始化,就无法调整大小。 ListCollection接口,而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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM