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

Java 使用toArray()方法将ArrayList转换为数组,java,arrays,list,toarray,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("

考虑以下代码:

 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();
我了解到为参数指定大小为0的好处是Java将为返回值创建一个大小合适的新数组

有人能解释一下吗,我在JavaAPI中查找了toArrayString[]stringArray方法。我仍然不明白上面的陈述所暗示的返回值是什么


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

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

这里有一个直接来自javadoc的更详细的报价:

返回一个数组,该数组以正确的方式包含此列表中的所有元素 从第一个元素到最后一个元素的顺序;的运行时类型 返回的数组是指定数组的数组。如果列表符合 指定的数组,则返回该数组。否则,将创建一个新数组 使用指定数组的运行时类型和 这张单子

如果列表适合指定的阵列,且有备用空间,即 数组中的元素多于列表中的元素 集合结束后立即设置为null。这 仅当调用方 知道列表不包含任何空元素


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

这里有一个直接来自javadoc的更详细的报价:

返回一个数组,该数组以正确的方式包含此列表中的所有元素 从第一个元素到最后一个元素的顺序;的运行时类型 返回的数组是指定数组的数组。如果列表符合 指定的数组,则返回该数组。否则,将创建一个新数组 使用指定数组的运行时类型和 这张单子

如果列表适合指定的阵列,且有备用空间,即 数组中的元素多于列表中的元素 集合结束后立即设置为null。这 仅当调用方 知道列表不包含任何空元素


当您将太小的数组传递给toArray方法时,它将创建一个具有相同类但大小正确的数组。空数组长度0非常适合这种情况。

当您将太小的数组传递给toArray方法时,它将创建一个具有相同类但大小正确的数组。空数组长度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;
}

从这里开始,行为应该非常清楚。

查看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;
}

从这里开始,行为应该非常清楚。

正确的方法是T[]myArray=list.toArraynew T[list.size];。您的问题到底是什么?可能会对您有所帮助。@singhakash谢谢,这正是我需要的。正确的方法是T[]myArray=list.toArraynew T[list.size];。你的问题到底是什么?可能对你有帮助。@singhakash谢谢,这正是我需要的谢谢,我刚刚对Hexafrance的答案留下了评论,我向下滚动,你回答了我的问题。谢谢,我刚刚对Hexafrance的答案留下了评论,我向下滚动,你已经回答了我的问题。@RamanSB如果你仔细阅读我引用的javadoc,你会发现前者是正确的。传入的任何数组太短都会导致返回一个新数组。@RamanSB如果仔细阅读我引用的javadoc,就会发现前者是如此。传入的任何数组太短都会导致返回新数组。