2016-06-16 30 views
-3

假設我有一個集合(LinkedList)。如何將集合轉換爲數組而不創建新數組?

Collection<String> list = new LinkedList<>(); 

for (int i = 0; i < 1_000_000; i++) { 
    String randomString = RandomStringUtils.random(i); 
    list.add(randomString); 
} 

Object[] objects = list.toArray(); 

當我調用toArray方法,如果力量我的應用程序創建一個新的陣列。例如,在鏈表實現toArray看起來是這樣的:

public Object[] toArray() { 
    Object[] result = new Object[size]; 
    int i = 0; 
    for (Node<E> x = first; x != null; x = x.next) 
     result[i++] = x.item; 
    return result; 
} 

是否有可能恢復從集合陣列時不分配數組的新的記憶?

+2

如果你不創建一個新的數組,你想要在哪裏存儲元素? – Tunaki

回答

0

是否有可能從集合中檢索數組而不爲數組分配新的內存?

(重點煤礦)

可以重新使用預先分配的陣列:

Object[] arr = new Object[1_000_000]; 

,然後通過調用toArray(T[])過載,從而避免了陣列的重新分配使用相同的數組多次:

list.toArray(arr); 

需要注意的是,arr必須至少大小的集合;否則,相同的元素類型的新數組將被分配並返回:

Object[] correctSizedArray = list.toArray(wronglySizedArray); 
0

這隻會創建一個新的數組,如果參數數組是不是大到足以容納所有條目:

String[] strings = new String[1000]; 
String[] result = list.toArray(strings); 
相關問題