我想知道使用Arrays.asList
的優缺點。我在我的代碼中使用它時遇到了一個問題。使用Arrays.asList的優缺點
此外,我想知道一個數組轉換爲數組列表(集合)的最佳途徑,而無需使用Arrays.asList
我想知道使用Arrays.asList
的優缺點。我在我的代碼中使用它時遇到了一個問題。使用Arrays.asList的優缺點
此外,我想知道一個數組轉換爲數組列表(集合)的最佳途徑,而無需使用Arrays.asList
在磁盤陣列轉換成一個ArrayList,我這樣做:
new ArrayList<T>(Arrays.asList(myArray));
您需要將您的列表包裝在新的ArrayList中,否則您將無法添加任何元素,因爲asList()返回的列表具有固定大小。所以你在嘗試添加元素時會得到UnsupportedOperationException。
但是你可能也想做到這一點,如果你不喜歡上面的方法:
Collections.addAll(arraylist, array);
兩者都是同等性能的角度來看,作爲據我所知。
但更重要的是,使用第一種方法的問題是什麼?
Arrays.asList讓你看看一個數組,就好像它是一個List。這意味着未來對陣列的更改將影響列表,未來對列表的更改將影響陣列。無論這是一個好還是壞的事情取決於你打算如何處理這個List,以及你希望它如何與這個數組相關聯。
對於拋棄使用,我一定會去Arrays.asList。例如,List有一個顯示內容的toString,所以System.out.println(Arrays.asList(myArray))可能很有用。
如果您想保留數組的快照,而不受未來更改的影響,我仍然會使用Arrays.asList,但是從結果創建一個新的List,如前一個來自@NNzz的答案所示。
好久不見!歡迎登機! –
我想知道使用Arrays.asList的優缺點。
主要「優點」是:
主要的 「缺點」 是:
(也有一個明顯的限制:你不能申請asList
到一系列基元。但是,轉換一系列基元是不平凡的......)
我想知道一個數組轉換爲數組列表(集合)的最佳途徑,而無需使用Arrays.asList
最簡單的方法把一個數組列表,而無需使用aslist是:
new ArrayList<T>(Arrays.asList(arrayOfT))
您可以用此得到表現稍好:
ArrayList<T> list = new ArrayList<T>(arrayOfT.length);
Collections.addAll(list, arrayOfT);
因爲ArrayList<T>(Collection<T>)
構造函數首先調用toArray()
來創建一個臨時數組(至少在Java 7中它是這樣做的)。這意味着有一個額外的副本在引擎蓋下進行。
但底線是,只是使用Arrays.asList
是比任何避免使用它更簡單和便宜。
除了現有的答案,特別是@Stephen C的一個很好的答案,Arrays.asList
還有一個問題。
從有效的Java
Arrays.asList
從未被設計來收集多個參數到一個列表,但它似乎好主意,改造它這樣做時,可變參數被添加到該平臺。因此,它成爲可能做這樣的事情:
List<String> homophones = Arrays.asList("to", ""too", "two");
這種用法的作品,但它是一個很大的錯誤來啓用它。
釋放1.5之前,這是一個常見的成語打印數組的內容:
// Obsolete idiom to print an array!
System.out.println(Arrays.asList(myArray));
成語是必要的,因爲陣列繼承自Object toString
實施,因此調用toString
直接在陣列產生一個無用的字符串,如[Ljava.lang.Integer;@3e25a5
。這個習語只適用於對象引用類型的數組,但是如果你不小心在一個基元數組上嘗試過它,程序將無法編譯。例如,此程序:
Va.java:6:在陣列asList(對象[])不能被施加到(INT
public static void main(String[] args) { int[] digits = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 4 }; System.out.println(Arrays.asList(digits)); }
將在釋放1.4產生此錯誤消息[]) System.out.println(Arrays.asList(digits));
由於不幸的決定改造Arrays.asList作爲釋放1.5的可變參數的方法,該程序現在編譯沒有錯誤或警告。
在光明的一面,Arrays.asList用於將數組轉換爲字符串的習慣用法現在已經過時,而且當前的用法更加健壯。同樣在版本1中。5,Arrays類得到了全部補充Arrays.toString方法(不可變varargs方法!)專門設計爲任何類型的數組轉換爲字符串。如果你在的地方Arrays.asList使用Arrays.toString,該程序會產生預期的結果:
// The right way to print an array
System.out.println(Arrays.toString(myArray));
什麼是你facing.you必須嘗試添加一些elements..this問題是不可能的Arrays.asList.Its只是一個數組的列表包裝。 – Emil
@Emil好點,在這種情況下'new ArrayList <>(Arrays.asList(array));'會做的伎倆。 – assylias