2011-07-31 49 views
3

我只是想知道什麼是利益和方法asList()Arrays目的。什麼是使用asList的目的是什麼?

它返回由指定數組支持的固定大小的列表,因此,我們不能添加元素到該列表,這將是一樣的陣列(我們不能元素添加到它)。有沒有辦法將固定大小的列表轉換爲非固定大小的列表?

當我嘗試添加元素,以固定大小的列表它拋出UnsupportedOperationException

Double[] d = {3.0, 4.0, 5.0}; 
List<Double> myList = Arrays.asList(d); 
myList.add(6.0); // here it will throw an exception 

回答

11

從Java文檔:

「此方法作爲和基於陣列的基於集合的API之間橋」

對於你的問題;

Double[] d = {3.0, 4.0, 5.0}; 
List<Double> yourList = new ArrayList(Arrays.asList(d)); 
yourList.add(6.0); 
+0

+1,用於爲異常提供解決方案。 – camickr

+0

/同意@camickr – Carl

1

從javadocs中:

此方法充當之間橋陣列爲基礎的和基於集合的 API以及Collection.toArray()。

所以,如果你想能夠傳遞一個數組到一個方法期待Collection這提供了一個方便的方法來做到這一點。

1

它用於創建數組作爲List視圖,所以你可以把它傳遞給接受List/Collection許多方法。

4

對於在需要List其他方法(的List或一些超接口,諸如CollectionIterable)作爲參數使用。即,

Double[] doubles = { 0d, 1d, 2d }; 
//... somewhere ... 
someMethodThatRequiresAList(Arrays.asList(doubles)); 
//... elsewhere that you can't change the signature of ... 
public void someMethodThatRequiresAList(List<Double> ds) { /* ... */ }; 
3

你不能把它轉換成一個可變大小列表,但您可以創建一個新的:

List<Double> myOtherList = new ArrayList<Double>(myList); 
myOtherList.add(6.0); 

另外,請注意myList中是視圖陣列上。所以,如果你改變陣列

d[0] = 0.0; 
    System.out.println(myList); 

你會得到[0.0,4.0,5.0]

在很多,很多情況下,一個固定大小的列表會做得很好,但當然這取決於你是什麼這樣做。我個人傾向於在測試用例中使用Arrays.asList。

2

只是一些意見,Java文檔說明了一切:

public static <T> List<T> asList(T... a) 

Returns a fixed-size list backed by the specified array. 

在下面,asList返回Array.ArrayList實例,這是從不同java.util.ArrayList中。唯一允許修改列表的方法是:

public E set(int index, E element) {...}