2017-04-03 46 views
-1

參考Difference between Arrays.asList(array) vs new ArrayList<Integer>(Arrays.asList(ia)) in java 我很好奇,因爲Arrays.asList()方法的確切用途是什麼。使用Arrays.asList創建列表的好處

當我們從它創建一個新的List,比方說 -

Integer[] I = new Integer[] { new Integer(1), new Integer(2), new Integer(3) }; 
List<Integer> list1 = Arrays.asList(I); 
List<Integer> list2 = ((List<Integer>) Arrays.asList(I)); 

我們不能像.add().remove()執行大部分的常規操作。因此,我無法添加迭代器來避免concurrent modification

甲骨文的文檔狀態

公共靜態列表asList(T ... a)首先

返回由指定數組支持的固定大小的列表。 (更改爲 返回的列表「通過」寫入數組。)此方法在基於數組和基於collection的API之間充當 橋接,組合爲 與Collection.toArray()。返回的列表是可串行化的,並且 實現RandomAccess。

它適用於創建新的ListList<Integer> list3 = new ArrayList<>(Arrays.asList(I));

那麼,爲什麼這個和它的優點和缺點是什麼?

+0

一個是數組的列表**視圖**。另一個是將數組拷貝到一個完全獨立的'List'中。你正在比較[蘋果和橙子](https://en.wikipedia.org/wiki/Apples_and_oranges)。 –

+1

這是獲取列表的最簡單方式。 'Arrays.asList(「Alpha」,「Beta」)'。它明確地支持你給它的數組 - 你可以用它來實際修改一個數組,如果這是你所需要的。 – khelwood

+0

如果你已經有一個'Integer []',那麼Arrays.asList和ArrayList之間可能沒有太大的區別(當然,除非你需要ArrayList的功能)。但是如果你不這樣做,那麼列表 list1 = Arrays.asList(1,2,3)'是非常方便的。 – yshavit

回答

1

不能調用添加,刪除等是完全不同的。如果你不需要這些方法,Arrays.asList可以讓你完美地將數組視爲一個List(對於採用集合而不是數組的API)。如果你需要改變列表的「形狀」,那麼新的ArrayList <>(Arrays.asList(myArray))是要走的路。