Przeprowadziliśmy więc kilka zasadniczych testów, z których główny wniosek jest taki, że najszybsze są zwykłe tablice.
TODO: zrobić z tego jakies obrazki.
przebieganie listy (for each):
LinkedList | ArrayList | ArrayList.ensureCapacity() | Vector | Vector.ensureCapacity() | Array | |
---|---|---|---|---|---|---|
50 | 14 | 5 | 1 | 2 | 2 | 0 |
100 | 3 | 3 | 3 | 3 | 4 | 1 |
200 | 7 | 6 | 5 | 7 | 7 | 1 |
500 | 17 | 19 | 13 | 18 | 18 | 7 |
1000 | 36 | 31 | 26 | 35 | 36 | 1 |
2000 | 84 | 67 | 53 | 65 | 65 | 23 |
5000 | 422 | 169 | 292 | 172 | 163 | 99 |
10000 | 1950 | 654 | 1023 | 489 | 491 | 636 |
tworzenie i wypełnianie:
LinkedList ArrayList ArrayList.ensureCapacity() Vector Vector.ensureCapacity() Array
1 0 0 0 0 0 0
5 0 0 0 0 0 0
10 0 0 0 0 0 0
50 14 5 1 2 2 0
100 3 3 3 3 4 1
200 7 6 5 7 7 1
500 17 19 13 18 18 7
1000 36 31 26 35 36 11
2000 84 67 53 65 65 23
5000 422 169 292 172 163 99
10000 1950 654 1023 489 491 636
W razie gdyby od czasu do czasu była potrzebna reprezentacja tablicy jako listy istnieje metody statyczna Arrays.asList(), która "w miejscu" przekonwertuje nam tablicę na listę. Tutaj "w miejscu" oznacza, że lista ta będzie niemodyfikowalna, a dane nie zostaną skopiowane. Nałożenie interfejsu listy na tablicę troszkę jednak trwa (patrz wynik), choć i tak jest szybsze niż działanie bezpośrednio na listach (pod warunkiem, że działanie na listach jest nam potrzebne rzadko)
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html#asList(T...)
inne informacje na podobny temat:
linked list vs array list
chaoticjava.com