🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
4 messages
4 total messages Started by Adam Gramowski Thu, 22 Sep 2011 10:25
LinkedList vs ArrayList
#152894
Author: Adam Gramowski
Date: Thu, 22 Sep 2011 10:25
22 lines
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
#152895
Author: Jacek Czerwinski
Date: Thu, 22 Sep 2011 12:58
28 lines
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
#152896
Author: Boguś
Date: Thu, 22 Sep 2011 18:19
34 lines
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
#152897
Author: Zbigniew Malec
Date: Thu, 22 Sep 2011 21:41
26 lines
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