Java中如何把数组转换为ArrayList

这篇文章主要讨论Stack Overflow上面公选投票最多的一个问题:
如何把下面的数组转换成为一个ArrayList?

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

1. 点赞最多的答案

最受认可的答案如下:

ArrayList<Element> arrayList = new ArrayList<Element>(Arrays.asList(array));

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

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

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

  1. 将collection c的元素转换成一个数组
  2. 将这个数组复制给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;
        }
    }

2. 点赞第二的答案

排名第二的答案如下:

List<Element> 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)

3. 其他答案

Element[] array = {new Element(1), new Element(2)};
List<element> list = new ArrayList<element>(array.length);
Collections.addAll(list, array);

问题出自:The stackoverflow question link

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

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

Integer[] array=new Integer[]{1,2,3,4,5};
LinkedList<Integer> linkedList=new LinkedList<Integer>(Arrays.asList(array));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,760评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,141评论 0 62
  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光剑书架上的书阅读 3,928评论 2 8
  • 2017年开年第一本,《水浒传》。说来也是凑巧,元旦前剧荒,随便打开网页搜国产剧,看到新水浒评分不低,于是点开来看...
    朕乃一介弱女子阅读 1,463评论 0 1
  • 狂沙万里风云变, 独行剑客气盖天。 策鞭大漠挥豪情, 风沙拂拭沧桑泪。 — — — 一骑绝尘破风去, 乾坤苍...
    星辰溥天阅读 218评论 0 2