使用toArray()方法将ArrayList转换为数组

时间:2015-08-17 17:55:33

标签: java arrays list toarray

请考虑以下代码:

 import java.util.*;

 public class ArrayQuestion{
        public static void main(String[] args){
               List<String> list = new ArrayList<>();
               list.add("Chocolate");
               list.add("Vanilla");
    //Converting the List to an Array
        Object[] objectArray = list.toArray();

因此toArray方法返回一个默认类型为Object []的数组。 假设我想创建一个String数组,我读到我会将一个string []对象传递给toArray方法。

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

我读到为参数指定大小为0的优点是Java将为返回值创建一个适当大小的新数组。

有人可以解释一下,我在Java API中查找了toArray(String [] stringArray)方法。我仍然不明白上述陈述的回报价值是什么。

我的问题是关于传递给toArray方法的参数以及为什么它为0以及传递0如何创建一个适当大小的列表的数组。

3 个答案:

答案 0 :(得分:3)

列表的返回值将分配给stringArray。例如,如果list包含15个字符串,则调用list.toArray(new String[0])将返回包含15个元素的String[]

这是一个引用更详细的引用,直接来自javadoc:

  

返回一个包含此列表中所有元素的数组   序列(从第一个到最后一个元素);运行时的类型   返回的数组是指定数组的数组。 如果列表适合   指定的数组,在其中返回。否则,一个新的数组是   分配了指定数组的运行时类型和大小   这个清单。

     

如果列表适合指定的数组,并且有空余空间(即   数组中包含的元素多于列表中的元素   紧接在集合结束后设置为null。 (这个   仅在调用者时才有助于确定列表的长度   知道列表不包含任何null元素。)

答案 1 :(得分:2)

当您传递的数组太小而无法使用toArray方法时,它会创建一个具有相同类但具有正确大小的数组。空数组(长度为0)非常适合。

答案 2 :(得分:0)

查看LinkedList

的实现
public <T> T[] toArray(T[] a) {
    if (a.length < size)
        a = (T[])java.lang.reflect.Array.newInstance(
                            a.getClass().getComponentType(), size);
    int i = 0;
    Object[] result = a;
    for (Node<E> x = first; x != null; x = x.next)
        result[i++] = x.item;
    if (a.length > size)
        a[size] = null;
    return a;
}

行为应该很清楚。