2015-08-17 45 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; 
} 

的行爲應該是從那裏很清楚。

相關問題