2010-03-29 70 views
2

如何用一个List提供的数据填充数组?用List数据填充数组

例如,我有一个字符串列表:

List l = new ArrayList<String>(); 
l.add("a"); 
l.add("b"); 
l.add("c"); 

话,我想这个数据复制到一个String数组:

String[] array = ? 

回答

9

有一个在列表中的toArray()方法...
您必须先分配一个适当大小的数组(通常为list.size()),然后将其作为参数传递给toArray方法。该数组将使用列表内容进行初始化。

例如:

String[] myArray = new String[myList.size](); 
myList.toArray(myArray); 

你也可以做指定者

的括号内的新呼叫
+2

为了安全,它应该是'myArray = myList.toArray(myArray);' – Hardcoded 2010-03-29 15:17:53

+0

@Hardcoded:我一直在想那个。为什么这里还有返回类型?我总是讨厌改变他们的输入并返回它的方法,除非你链接它们。 – Uri 2010-03-29 15:38:05

+0

该方法首先检查给定的数组是否足够大。如果不是,则会创建一个新的。数组参数的唯一原因是,在运行时没有关于数组类型的信息。它本来也可以是一个Class对象。 – Hardcoded 2010-03-29 15:43:38

7

首先,你必须指定具体类型的List - List<String>(不要将其生的)。

然后,你可以做

String[] array = list.toArray(new String[list.size()]); 
1
String[] array = new String[l.size()]; 
l.toArray(array); 
2

语法是有点愚蠢的;你必须提供你自己创建的数组作为输入。

String[] array = l.toArray(new String[l.size()]); 
3

可以使用toArray(T[] a)方法:

String[] arr = list.toArray(new String[0]); 

或者交替:

String[] arr = list.toArray(new String[list.size()]); 

这两者之间的区别是,后者可能不需要分配一个新的数组。


有效的Java第二版:第23项:不要在新代码中使用原始类型。

JLS 4.8 Raw Types

使用原始类型被允许仅作为让步的遗留代码兼容。强烈建议在将通用性引入到Java编程语言后编写的代码中使用原始类型。 未来版本的Java编程语言可能会禁止使用原始类型。


不要命名的标识符l的习惯。它看起来非常像1