美文网首页移动开发
Java中如何把数组转换为ArrayList

Java中如何把数组转换为ArrayList

作者: MrDTree | 来源:发表于2016-02-18 22:22 被阅读2779次

    这篇文章主要讨论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));
    

    相关文章

      网友评论

        本文标题:Java中如何把数组转换为ArrayList

        本文链接:https://www.haomeiwen.com/subject/lanmkttx.html