Thread View: pl.comp.lang.java
4 messages
4 total messages
Started by Adam Gramowski
Thu, 22 Sep 2011 10:25
LinkedList vs ArrayList
Author: Adam Gramowski
Date: Thu, 22 Sep 2011 10:25
Date: Thu, 22 Sep 2011 10:25
22 lines
2195 bytes
2195 bytes
WItam
optymalizuje właśnie pewne źródła w java i często stosowane w nich są
obiekty typu ArrayList, przy czym jedyne ich używanie to albo
dodawanie jako ostatniego elementu, albo przechodzenie w pętli od
pierwszego do ostatniego.
W związku z tym mam pytanie:
czy nie warto takiego obiektu zamienić na równoważny LinkedList ?
Zastanawia mnie, bo nie wiem ,czy kompilator javy spotykając pętlę w
rodzaju:
ArrayList<X> x;
...
for (int i=0;i<x.size();i++) {
X = x.get(i);
}
gdzie w jej środku brak jest innych odniesień do "i" jak służących do
pobrania elementu nr "i" sam nie optymalizuje takiego kodu czyniąc go
nie bardziej złożonym niż w przypadku takiej samej pętli z użyciem
LinkedList.
Czy myślicie ze jest sens bawić się w takie zamiany?
Re: LinkedList vs ArrayList
Author: Jacek Czerwinski
Date: Thu, 22 Sep 2011 12:58
Date: Thu, 22 Sep 2011 12:58
28 lines
2096 bytes
2096 bytes
W dniu 2011-09-22 12:25, Adam Gramowski pisze: > WItam > optymalizuje właśnie pewne źródła w java i często stosowane w nich są > obiekty typu ArrayList, przy czym jedyne ich używanie to albo > dodawanie jako ostatniego elementu, albo przechodzenie w pętli od > pierwszego do ostatniego. > > W związku z tym mam pytanie: > czy nie warto takiego obiektu zamienić na równoważny LinkedList ? > > Zastanawia mnie, bo nie wiem ,czy kompilator javy spotykając pętlę w > rodzaju: > ArrayList<X> x; Nie wiem jak z optymalizacją, ale chyba oficjalną szkołą użycia Javy (czy tzw najlepsze praktyki), że w kodzie używa się "najniższego wspólnego mianownika", w tym wypadku interfejsu List<X>. Pozwala to ukryć (oddzielić) konstruowanie obiektu o konkretnej implementacji (tu XxxxxList ) od jego użycia. MIĘDZY INNYMI pozwala stosunkowo bezstressowo sprawdzić jak by chodziło z inną implementacją. Kibicuję od jakiegoś czasu kontenerom m.in. zastępującym te z biblioteki standardowej, kiedyś ich użyję ale wyłącznie implementujących standardowe i właśnie pod powyższym warunkiem. Zaznaczam, nie znam się na agresywnej optymalizacji w Javie.
Re: LinkedList vs ArrayList
Author: Boguś
Date: Thu, 22 Sep 2011 18:19
Date: Thu, 22 Sep 2011 18:19
34 lines
1682 bytes
1682 bytes
Dnia 22-09-2011 o 12:25:51 Adam Gramowski <adam.gramowski@gmail.com>
napisał(a):
> Zastanawia mnie, bo nie wiem ,czy kompilator javy spotykając pętlę w
> rodzaju:
> ArrayList<X> x;
> ...
> for (int i=0;i<x.size();i++) {
> X item = x.get(i);
> }
> gdzie w jej środku brak jest innych odniesień do "i" jak służących do
> pobrania elementu nr "i" sam nie optymalizuje takiego kodu czyniąc go
> nie bardziej złożonym niż w przypadku takiej samej pętli z użyciem
> LinkedList.
Ta pętla obecnie ma złożoność liniową. W przypadku użycia LinkedList
będzie miała kwadratową.
Konstrukcja z iteratorem będzie miała złożoność liniową zarówno w
przypadku ArrayList jak i LinkedList:
Iterator<X> xIt = x.iterator();
while(x.hasNext()){
X item = x.next();
}
lub równoważna
for (X item : x){
item.doSomething();
}
--
Boguś
Re: LinkedList vs ArrayList
Author: Zbigniew Malec
Date: Thu, 22 Sep 2011 21:41
Date: Thu, 22 Sep 2011 21:41
26 lines
1493 bytes
1493 bytes
On Thu, 22 Sep 2011 20:19:14 +0200, Boguś wrote:
> Ta pętla obecnie ma złożoność liniową. W przypadku użycia LinkedList
> będzie miała kwadratową.
>
> Konstrukcja z iteratorem będzie miała złożoność liniową zarówno w
> przypadku ArrayList jak i LinkedList:
>
> Iterator<X> xIt = x.iterator();
> while(x.hasNext()){
> X item = x.next();
> }
>
> lub równoważna
>
> for (X item : x){
> item.doSomething();
> }
Tak jak wyżej kolega napisał + ja bym najpierw pobawił się jakimś
profilerem i zidentyfikował wąskie gardła, a dopiero potem brał się za
optymalizację.
--
Pozdrawiam
Zbyszek Malec
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads