2010-03-18 3 views
41

Я хотел бы спросить: как вы конвертируете Collection в List в Java?Преобразование коллекции в список

+4

Вы хотите * сказать *? Или вы действительно хотите * знать *? :) – BalusC

+0

Кажется, вы не знаете, как использовать общие коллекции в Java. Как насчет чтения учебника? http://java.sun.com/docs/books/tutorial/collections/intro/index.html – mickthompson

+0

Итак, мы ждем вашу историю. – Artic

ответ

47

Если вы уже создали экземпляр своего подтипа List (например, ArrayList, LinkedList), вы можете использовать метод addAll.

например,

l.addAll(myCollection) 

Многие список подтипов могут также взять коллекцию источника в их конструктор.

2

Сделайте новый список и позвоните addAll с помощью коллекции.

0

вы можете использовать любого из 2-х решений .. но думать о том, нужно ли клонировать свои коллекции, так как коллекция будет содержать тот же объект ссылается

-3

Collection и List интерфейсы. Вы можете взять любой реализации интерфейса List: ArrayList LinkedList и просто бросить его обратно в Collection, потому что он находится в Top

Приведенный ниже пример показывает отливки из 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

+4

Я подозреваю, что вы были заблокированы, потому что это не всегда будет работать. Конечно, когда класс реализации 'Collection' реализует' List' (например, 'ArrayList',' LinkedList' ...), вы в порядке. Но как только вы попытаетесь сделать что-то вроде «Карта myMap = new HashMap (); Список fromMap = (Список ) myMap.values ​​(); 'все отлично смотрится во время компиляции, но когда вы запустите его, вы получите' java.lang.ClassCastException: java.util.HashMap $ Значения не могут быть переданы в java. util.List'. –

+1

Это просто концептуально совершенно неправильно. Вы не можете «принудить» произвольную коллекцию стать списком путем кастинга. –

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

Спасибо за Sandeep положить его - Просто добавил нулевую проверку, чтобы избежать инструкции NullPointerException в else.

if(collection==null){ 
    return Collections.emptyList(); 
} 
List list; 
if (collection instanceof List){ 
    list = (List)collection; 
}else{ 
    list = new ArrayList(collection); 
} 
Смежные вопросы