Autor Wątek: Pyt z Javy  (Przeczytany 2533 razy)

Offline rhdbisgrt

  • Użytkownik

# Listopad 24, 2012, 20:49:51
Nie pisze w javie i o tyle nie znam sie na niej i moze ktos kto w niej pisze moglby mi udzielic prostej odpowiedzi (tnx):

O ile rozumiem dwa najczesciej uzywane kontenery to ArrayList i List czy ktoś mogłby mi powiedzieć na czym oparta jest ich wewnetrzna implementacja (to by mi wyjasnilo w jaki sposob i do czego ich uzywac) czy moze Arraylist jest zbudowana tak jak zwykla lita tablica (jak wtedy wyglada implementacja jej resizowania?) nt List jest moze zbudowana tak jak lista w c typu wskaznik do przodu wskaznik do tylu? (tnx)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Liosan

  • Redaktor

# Listopad 24, 2012, 20:53:24
List to interfejs, ArrayList to implementacja odpowiadająca std::vector, a odpowiednikiem std::list jest LinkedList.

Liosan

Offline Paweł

  • Użytkownik

# Listopad 24, 2012, 21:17:07
A Vector jaki ma odpowienik w c++?

Offline Aithne

  • Użytkownik

  • +1
# Listopad 24, 2012, 21:32:41
Też std::vector. Ale Vector jest stary i niedobry (wszystkie metody synchronizowane? wat), najlepiej o nim zapomnieć i używać ArrayList ;)

Offline rhdbisgrt

  • Użytkownik

# Listopad 24, 2012, 21:44:11
List to interfejs, ArrayList to implementacja odpowiadająca std::vector, a odpowiednikiem std::list jest LinkedList.

Liosan

Czyli tak jak pisalem, ArrayList to ciagly obszar resizowany czyms w rodzaju odpowiednika realloca a List poszarpane chunki i wskazniki?

Offline Liosan

  • Redaktor

# Listopad 24, 2012, 21:48:54
Czyli tak jak pisalem,
Z tego co Ty pisałeś to ja niewiele zrozumiałem, oprócz tego że chcesz się dowiedzieć co to za struktury.

ArrayList to ciagly obszar resizowany czyms w rodzaju odpowiednika realloca a List poszarpane chunki i wskazniki?
Nie o.o Jak to miło, jak ktoś czyta ze zrozumieniem. Przecież List to interfejs.

LinkedList owszem, jest implementowany tak jak std::list. A czy to są poszarpane chunki to ja nie wiem bo nie mam pojęcia jak się zachowuje JRE na tak niskim poziomie. Ale pewnie są.

Liosan

Offline rhdbisgrt

  • Użytkownik

# Listopad 24, 2012, 21:53:03
Z tego co Ty pisałeś to ja niewiele zrozumiałem, oprócz tego że chcesz się dowiedzieć co to za struktury.
Nie o.o Jak to miło, jak ktoś czyta ze zrozumieniem. Przecież List to interfejs.

LinkedList owszem, jest implementowany tak jak std::list. A czy to są poszarpane chunki to ja nie wiem bo nie mam pojęcia jak się zachowuje JRE na tak niskim poziomie. Ale pewnie są.

Liosan

A implementacja ArrayList pracuje na ciaglym obszarze, moze wiesz? Chyba jest jeszcze zwykla array w javie czy to może to samo co ArrayList, może wiesz? tnx

Offline Xion

  • Moderator
    • xion.log

  • +1
# Listopad 24, 2012, 22:19:54
Jasny gwint, to Google ma już taki kiepski uptime że nawet takich rzeczy nie da się znaleźć?...

Oh wait, wcale nie:

Each ArrayList instance has a capacity. The capacity is the size of the array used to store the elements in the list. It is always at least as large as the list size. As elements are added to an ArrayList, its capacity grows automatically. The details of the growth policy are not specified beyond the fact that adding an element has constant amortized time cost.
Czyli standardowa kombinacja size + capacity, z niezdefiniowanym z góry współczynnikiem zapełnienia który powoduje realokację. Bardzo podobne do std::vector.

Offline Shusty

  • Użytkownik

  • +1
# Listopad 24, 2012, 22:22:18
Leć do biblioteki,księgarni, czy nawet po ebooka i zaczytaj się w Cormenie, a uzyskasz więcej wiedzy i szybciej niż nakręcając takie wątki, albo też wystarczy na wykładach z Algorytmów i Struktur Danych słuchać, ale rozumiem, że nie studiujesz infy po prostu, dlatego zachęcam do książki legendy (ktoś się nie zgadza?).


Offline rhdbisgrt

  • Użytkownik

# Listopad 24, 2012, 23:10:43
Leć do biblioteki,księgarni, czy nawet po ebooka i zaczytaj się w Cormenie, a uzyskasz więcej wiedzy i szybciej niż nakręcając takie wątki, albo też wystarczy na wykładach z Algorytmów i Struktur Danych słuchać, ale rozumiem, że nie studiujesz infy po prostu, dlatego zachęcam do książki legendy (ktoś się nie zgadza?).

Chodzi własnie o to że nie mam czasu czytać Cormena ani zbyt gleboko (>15 minut) wertować googla, bo bylem zainteresowany tylko tym drobiazgiem z jawy (czytam booki i wertuje googla glebiej ale w swojej dziedzinie tj bardziej w kierunku optymalizacje w c) (Zreszta z ta implementacja chyba nie taka łatwa sprawa wyszukac - To co podał kolega Xion (adding an element has constant amortized time cost) tez troche niezbyt wyjasnia (bo nie wiadomo jaki to koszt - W sumie to nawet gmatwa bo zdawalo mi sie ze to jest pewnie lita tablica z czyms w rodzaju realloc ale tutaj czas realloc jest proporcjonalny do czasu rekopiowania,
a ten rosnie z rozmiarem tablicy wiec nie bylby staly - tymsamym czyzby array list nie bylo zrobione na jednym kawalku tablicy? :/


EDIT

ok, znalazlem, okazalo sie ze mozna podejrzec zrodla, nie zagladalem ale podobno jest zrobione na zwyklej jawowej tablicy (mozna by wyszukac jak jest robiony reallok ale chyba kiedy indziej)
« Ostatnia zmiana: Listopad 24, 2012, 23:24:14 wysłana przez rhdbisgrt »

Offline Liosan

  • Redaktor

  • +7
# Listopad 24, 2012, 23:26:20
To co podał kolega Xion (adding an element has constant amortized time cost) tez troche niezbyt wyjasnia (bo nie wiadomo jaki to koszt - W sumie to nawet gmatwa bo zdawalo mi sie ze to jest pewnie lita tablica z czyms w rodzaju realloc ale tutaj czas realloc jest proporcjonalny do czasu rekopiowania,
a ten rosnie z rozmiarem tablicy wiec nie bylby staly - tymsamym czyzby array list nie bylo zrobione na jednym kawalku tablicy? :/
Proponowałbym jednak usiąść i poczytać, zwolnić, zastanowić się, to byś wiedział co to znaczy "czas amortyzowany". Nieuctwo szkodzi.

Liosan