【问题标题】:Is there a difference between List<String> A = new ArrayList<String> ( ) and ArrayList<String> A = new ArrayList<String>()?List<String> A = new ArrayList<String> () 和 ArrayList<String> A = new ArrayList<String>() 之间有区别吗?
【发布时间】:2014-12-16 22:37:02
【问题描述】:
String[] somestringarray = { "a","b","c"};

还有,

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

Arrays.asList() 是一个集合吗?并且该语句正在初始化一个大小为somestringarray 的列表?

为什么我不能只拥有somestringarray?声明字符串列表有什么意义,只有somestringarray 有什么问题?

【问题讨论】:

  • ArrayList 没有实现 Array 接口,因此您不能将 ArrayList 引用值分配给 Array 引用变量。
  • 另外,Java 中没有 Array 接口。 ArrayListList 的一种。 Arrays.asList()返回一个集合。

标签: java arrays string arraylist


【解决方案1】:

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

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

声明

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

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

【讨论】:

  • 而且,最糟糕的是,数组是协变的,破坏了类型安全性。
  • @DavidConrad 你的意思是编译时类型安全,因为在运行时数组会检查我们尝试放入数组的元素是否是正确的类型。的确,我们可以使用Object[] 引用来保存String[] 数组,但是如果我们尝试在这样的数组中放置例如Integer,我们将在ArrayStoreException 的帮助下停止。
  • @Pshemo 是的,编译时类型安全。
  • List A = new ArrayList ( ) 和 Array A = new ArrayList() 那两个语句没有区别吧?跨度>
  • @Lydia:没有 Array 类,所以区别在于第二个版本没有任何意义或编译。
【解决方案2】:

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;

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 2017-05-08
    • 2015-12-07
    • 2013-03-27
    • 2013-12-20
    • 1970-01-01
    • 2014-04-12
    • 2014-01-09
    • 1970-01-01
    相关资源
    最近更新 更多