Java中如何把數(shù)組轉(zhuǎn)換為ArrayList

這篇文章主要討論Stack Overflow上面公選投票最多的一個(gè)問(wèn)題:
如何把下面的數(shù)組轉(zhuǎn)換成為一個(gè)ArrayList?

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

1. 點(diǎn)贊最多的答案

最受認(rèn)可的答案如下:

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

首先,讓我們看一下Java幫助文檔中ArrayList的這種帶參構(gòu)造方法的說(shuō)明

ArrayList(Collection < ? extends E > c) : 構(gòu)造一個(gè)list,用迭代器將指定collection中的元素按順序放入其中。

這個(gè)構(gòu)造方法的實(shí)現(xiàn)過(guò)程:

  1. 將collection c的元素轉(zhuǎn)換成一個(gè)數(shù)組
  2. 將這個(gè)數(shù)組復(fù)制給ArrayList的成員變量數(shù)組“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. 點(diǎn)贊第二的答案

排名第二的答案如下:

List<Element> list = Arrays.asList(array);

這不是最佳的答案的原因在于,這個(gè)方法返回的list是固定大小的。事實(shí)上,它返回的并不是java.util.ArrayList,而是java.util.Arrays中一個(gè)私有靜態(tài)的內(nèi)部類。我們知道,ArrayList的實(shí)現(xiàn)原理是數(shù)組,隨著元素增多,數(shù)組會(huì)"擴(kuò)容";而asList()返回的是一個(gè)固定大小的基礎(chǔ)數(shù)據(jù)類型的數(shù)組。如果嘗試添加或者刪除元素,會(huì)拋出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);

問(wèn)題出自:The stackoverflow question link

4. 譯者補(bǔ)充:?jiǎn)栴}的小補(bǔ)充

不僅是ArrayList,其余List的子類(LinkList,Vector)也可以用同樣的方法實(shí)現(xiàn)數(shù)組和集合轉(zhuǎn)變

Integer[] array=new Integer[]{1,2,3,4,5};
LinkedList<Integer> linkedList=new LinkedList<Integer>(Arrays.asList(array));
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,706評(píng)論 18 399
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,265評(píng)論 0 62
  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光劍書(shū)架上的書(shū)閱讀 4,184評(píng)論 2 8
  • 2017年開(kāi)年第一本,《水滸傳》。說(shuō)來(lái)也是湊巧,元旦前劇荒,隨便打開(kāi)網(wǎng)頁(yè)搜國(guó)產(chǎn)劇,看到新水滸評(píng)分不低,于是點(diǎn)開(kāi)來(lái)看...
    朕乃一介弱女子閱讀 1,493評(píng)論 0 1
  • 狂沙萬(wàn)里風(fēng)云變, 獨(dú)行劍客氣蓋天。 策鞭大漠揮豪情, 風(fēng)沙拂拭滄桑淚。 — — — 一騎絕塵破風(fēng)去, 乾坤蒼...
    星辰溥天閱讀 272評(píng)論 0 2

友情鏈接更多精彩內(nèi)容