请考虑以下代码:
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如何创建一个适当大小的列表的数组。
答案 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;
}
行为应该很清楚。