2016-09-10 45 views
1

我最近有一個問題,將一個ArrayList的數組轉換爲一個2d數組。我發現這個網站的答案是告訴我使用Arrays到2d數組ArrayList在Java中

List<Object[]> arrayList; 
// initialize and fill the list of arrays 
// all arrays have the same length 
Object[][] array2d = arrayList.toArray(new Object[][] {}); 

這工作,但我GOOGLE了它了一下,讀的地方,它是conseidered不好的做法。我仍然使用它,因爲它是唯一實際工作的線型。

這實際上是什麼意思,它爲什麼被認爲是壞的?我不明白[][]{}位。我猜你是通過一個空的,但初始化Object[][].toArray()方法?

+0

這將是很好的鏈接,說這是不好的做法,只是爲了完整性的問題。 – nhouser9

回答

0

我找不到任何理由爲您的例子被認爲是不好的做法!

1

我唯一看到的是它創建一個數組,但不會使用它。

一個的Javadoc可以看到:

返回包含在該列表中正確序列中的所有元素的數組(從第一個到最後一個元素);返回數組的運行時類型是指定數組的運行時類型。如果列表符合指定的數組,則返回其中。否則,將使用指定數組的運行時類型和此列表的大小分配一個新數組。

它可以在法源代碼進行驗證:

@SuppressWarnings("unchecked") 
public <T> T[] toArray(T[] a) { 
    if (a.length < size) 
     // Make a new array of a's runtime type, but my contents: 
     return (T[]) Arrays.copyOf(elementData, size, a.getClass()); 
    System.arraycopy(elementData, 0, a, 0, size); 
    if (a.length > size) 
     a[size] = null; 
    return a; 
} 

所以你要創建一個空數組,則該方法將創建一個又一個。

Object[][] array2d = arrayList.toArray(new Object[arrayList.size()][]); 

關於[][]{}您的猜測是正確的。

一些技巧 here