java 数组转化为arraylist_Java中如何把数组转换为ArrayList

女爷i 2022-11-02 13:15 120阅读 0赞

这篇文章主要讨论Stack Overflow上面公选投票最多的一个问题:

如何把下面的数组转换成为一个ArrayList?

Element[] array = {new Element(1),new Element(2),new Element(3)};

  1. 点赞最多的答案

最受认可的答案如下:

ArrayList arrayList = new ArrayList(Arrays.asList(array));

首先,让我们看一下Java帮助文档中ArrayList的这种带参构造方法的说明

ArrayList(Collection < ? extends E > c) : 构造一个list,用迭代器将指定collection中的元素按顺序放入其中。

这个构造方法的实现过程:

将collection c的元素转换成一个数组

将这个数组复制给ArrayList的成员变量数组“elementData”

源代码:

public ArrayList(Collection extends E> c) {

elementData = c.toArray();

if ((size = elementData.length) != 0) {

// c.toArray might (incorrectly) not return Object[] (see 6260652)

if (elementData.getClass() != Object[].class)

elementData = Arrays.copyOf(elementData, size, Object[].class);

} else {

// replace with empty array.

this.elementData = EMPTY_ELEMENTDATA;

}

}

  1. 点赞第二的答案

排名第二的答案如下:

List list = Arrays.asList(array);

这不是最佳的答案的原因在于,这个方法返回的list是固定大小的。事实上,它返回的并不是java.util.ArrayList,而是java.util.Arrays中一个私有静态的内部类。我们知道,ArrayList的实现原理是数组,随着元素增多,数组会”扩容”;而asList()返回的是一个固定大小的基础数据类型的数组。如果尝试添加或者删除元素,会抛出UnsupportedOperationException 异常

list.add(new Element(4));

Exception in thread “main” java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

at collection.ConvertArray.main(ConvertArray.java:22)

  1. 其他答案

Element[] array = {new Element(1), new Element(2)};

List list = new ArrayList(array.length);

Collections.addAll(list, array);

  1. 译者补充:问题的小补充

不仅是ArrayList,其余List的子类(LinkList,Vector)也可以用同样的方法实现数组和集合转变

Integer[] array=new Integer[]{1,2,3,4,5};

LinkedList linkedList=new LinkedList(Arrays.asList(array));

发表评论

表情:
评论列表 (有 0 条评论,120人围观)

还没有评论,来说两句吧...

相关阅读