2010-03-18 72 views
41

我想問一下:如何在Java中將Collection轉換爲List將收藏集轉換爲列表

+4

你想*說*?或者你真的想要*知道*? :) – BalusC 2010-03-18 15:10:40

+0

看來你不知道如何在Java中使用通用集合。閱讀教程怎麼樣? http://java.sun.com/docs/books/tutorial/collections/intro/index.html – mickthompson 2010-03-18 15:45:17

+0

所以,我們正在等待你的故事。 – Artic 2010-03-18 17:44:12

回答

47

如果您已經創建了List子類型的一個實例(例如,ArrayList,LinkedList),那麼您可以使用addAll方法。

例如,

l.addAll(myCollection) 

許多列表亞型也可以採取源集合在其構造。

55
Collection<MyObjectType> myCollection = ...; 
List<MyObjectType> list = new ArrayList<MyObjectType>(myCollection); 

查看Java tutorials中的Collections trail

2

創建一個新列表,並致電addAll與集合。

0

您可以使用上述兩種溶液的..但想想是否有必要克隆你的收藏,因爲這兩個集合將包含相同的對象引用

-3

CollectionList是接口。你可以把List接口的任何實現:ArrayList LinkedList,只是將它轉換回一個Collection,因爲它是在下面顯示前

來自實例ArrayList

public static void main (String args[]) { 
    Collection c = getCollection(); 
    List myList = (ArrayList) c; 
} 

public static Collection getCollection() 
{ 
    Collection c = new ArrayList(); 
    c.add("Apple"); 
    c.add("Oranges"); 
    return c; 
} 
+1

爲什麼-1?說明? – Omnipresent 2010-03-18 15:51:41

+4

我懷疑你是低調的,因爲_這不會總是work_。當然,當'Collection'的實現類實現'List'(例如'ArrayList','LinkedList' ...)時,你很好。但只要你嘗試做一些事情,比如'Map myMap = new HashMap ();列表 fromMap =(List )myMap.values();'編譯時一切都很好 - 但是當你運行它時,你會得到java.lang.ClassCastException:java.util.HashMap $ Values不能轉換爲java。 util.List'。 – 2010-09-29 14:34:03

+1

這在概念上完全錯誤。您不能通過強制轉換強制任意Collection成爲List。 – 2017-07-18 13:57:42

5
List list; 
if (collection instanceof List) 
{ 
    list = (List)collection; 
} 
else 
{ 
    list = new ArrayList(collection); 
} 
1

感謝鑄件桑迪普把它 - 剛剛添加了空檢查,以避免在else語句中出現NullPointerException。

if(collection==null){ 
    return Collections.emptyList(); 
} 
List list; 
if (collection instanceof List){ 
    list = (List)collection; 
}else{ 
    list = new ArrayList(collection); 
}