2015-08-17 56 views
0

考虑下面的代码阵列:转化一个ArrayList使用的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方法。

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

,我读了指定大小为0的参数的好处是,Java将创造的返回值适当大小的新数组。

有人请解释这一点,我在Java API中查找了toArray(String [] stringArray)方法。我仍然不明白上述声明所指的回报价值。

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

+2

正确的做法是'T [] myArray = list.toArray(new T [list.size()]);'。你的问题到底是什么? –

+1

[源代码](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#ArrayList.toArray%28java.lang .Object%5B%5D%29)可能会帮助你。 – silentprogrammer

+0

@singhakash谢谢你,那正是我需要的 – RamanSB

回答

2

当传递数组太小的指定者的方法,它创建一个具有相同类但具有正确大小的数组。一个空数组(长度为0)非常适合。

+0

谢谢,我刚刚对hexafraction的回答发表了评论,我向下滚动,并回答了我的问题。 – RamanSB

3

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

这里的更多的细节报价,从直的Javadoc:

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

如果列表以房间指定的数组以备用(即, 阵列具有比所述列表多个元素)的配合,立即收集的末尾的数组 在元件被设置为空。 (这 在确定只有当呼叫者 知道列表不包含任何空元素的列表的长度是有用的。)

+1

@RamanSB如果你仔细阅读我引用的javadoc,你会发现前者就是这样。任何传入的数组太短都会导致返回一个新的数组。 – hexafraction

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

的行为应该是从那里很清楚。

相关问题