In questo esempio di codice da pagina 114 del The Well-Grounded Java Developer, l'ultima riga:passare la matrice di dimensioni pari a zero, salvare l'assegnazione?
Update[] updates = lu.toArray(new Update[0]);
contiene la nota: Passo gamma di dimensioni pari a zero, salvo allocazione
List<Update> lu = new ArrayList<Update>();
String text = "";
final Update.Builder ub = new Update.Builder();
final Author a = new Author("Tallulah");
for (int i=0; i<256; i++) {
text = text + "X";
long now = System.currentTimeMillis();
lu.add(ub.author(a).updateText(text).createTime(now).build());
try {
Thread.sleep(1);
} catch (InterruptedException e) {
}
}
Collections.shuffle(lu);
Update[] updates = lu.toArray(new Update[0]);
Cosa allocazione è questo risparmio, Esattamente?
Javadoc per List#toArray(T[] a) cita:
Se l'elenco si inserisce nella matrice specificata, viene ivi restituito. Altrimenti, un nuovo array è allocato con il tipo di runtime dell'array specificato e la dimensione di questa lista.
Quale è quello che ho ricordato: se la matrice passata a toArray(T[] a)
non può corrispondere a tutto nella lista, viene assegnato un nuovo array. Chiaramente, vi sono 256 elementi nella lista, che non può inserirsi in un array di dimensione 0, quindi una nuova matrice deve essere allocato all'interno del metodo, giusto?
Quindi è quella nota non è corretto? O c'è qualcos'altro?
In realtà, è meglio, imho, fare 'lu.toArray (nuovo aggiornamento [lu.size()])', ma ... – fge
Probabilmente un errore di battitura e dovrebbe significare "allocazione sicura"? Nel senso che è lasciato a 'toArray()' per "tranquillamente" creare l'array di dimensioni appropriate e tipizzate correttamente ... –
BTW Ho cenato con uno degli autori, ieri sera. ;) –