On Wednesday 12 of October 2005 12:53, Tuzinsky Vladimir wrote:
> Po par testoch s ArrayList a LinkedList sa mi zda, ze LinkedList ma vyznam
> iba v pripade, ze potrebujete pridavat prvky inde ako na koniec pola. Vtedy
> ArrayList musi kopirovat koniec pola. Napr.
>
>     List list = new ArrayList();
>     for (int i = 0; i < 100000; i++) {
>       list.add(0, new Integer(i));
>     }
>
> trva na mojom stroji viac ako 7s, zatial co to iste s LinkedList len nieco
> cez 100ms. Pri pridavani na koniec pola potrebuje LinkedList asi dva krat
> tolko casu ako ArrayList...

Vysledky techto testu jsou naprosto zrejme a ocekavane a new ArrayList(100000) 
by s tim uz asi moc neudelal. Presto mi prijde trojnasobna spotreba pameti 
jako velmi zavazny problem (T[] mate mnozinu objektu Entry<T>, ktery ma kazdy 
tri odkazy na T) a proto je jeho pouziti u opravdu velkych seznamu v radech 
desitek a stovek milionu, na ktere je urcen, trochu omezene. Navic staci 
pridat proiterovani celeho seznamu a soucet casu vytvoreni a pruchodu je jiz 
lepsi pro ArrayList (a to jiz u listu o delce pouze deset tisic), coz je ale 
take naprosto zrejme diky nutnosti projit vsechny prvky od zacatku pro 
nalezeni toho spravneho.

Takze vysledek je jasny: LinkedList je vhodny pouze na implementaci obrovskych 
front, kde nezalezi na velikosti pameti, kterou to zabere. No a prave 
use-case na pouziti takoveto fronty mi chybi. Kvuli frontam o delce v radu 
desitek prvku IMHO neni treba impementovat novou tridu ;-)
A use-case emulace prodejny s ovocem a zeleninou z konce osmdesatych let pri 
nakupu bananu mi prijde jako hodne umely pripad :-D
-- 
Oto 'tapik' Buchta, [EMAIL PROTECTED]
Senior Engineer, Systinet Corp,
http://www.systinet.com

Odpovedet emailem