lokowanie danych

0

Witam... :)

zastanawiam się czy jest w javie coś takego....

chciałem upakować w tablicę porcje danych nie wiedząc ile na to będę potrzebował wierszy.
ja to rozumiem tak że pierwszy wiersz jedna porcja danych...drugi wiersz - następna itd.
Wiadomo że przed użyciem tablicy trzeba zadeklarować ilość wierszy...
Kolekcje odpadają (za dużo zrzerają pamięci :/ )

Jest może jakiś sposób na takie coś? :)

0

Jak to za dużo pamięci zżerają?

0

jak korzystam...dajmy na przykład z ArrayList to muszę te dane przechowywać jako obiekty danego typu...

Po wrzuceniu do takiej przypuśćmy 60 000 tys danych robi się juz nieciekawie :/

1

To już nie kolekcje, ale same obiekty zżerają tę pamięć. Jeśli przechowujesz w kolekcjach głównie obiekty (a nie typy proste), to te z java.util są wystarczająco wydajne, a jeśli musisz zapisywać naprawdę ogromne ilości danych, to lepiej się zastanowić, czy nie lepiej byłoby robić to w jakiejś bazie danych.
Ale jeśli kolekcje z jdk ci nie wystarczają, to rzuć okiem na Trove / Google Java Collections.

0

A w tablicy to byś przechowywał jako co?
Myślisz, że dlaczego kolekcja ArrayList nazywa się tak, jak się nazywa? Bo dane trzyma w tablicy. Nie ma istotnej różnicy pamięciowej między trzymaniem danych w tablicy, a w kolekcji, studencie. Różnica może być co najwyżej w szybkości zapisu danych i ich odczytywania. Zresztą i tak nie masz wyjścia, bo nie znasz rozmiaru danych. Zastanów się jakie operacje będą wykonywane na tej kolekcji najczęściej i wybierz ArrayList lub LinkedList. Odsyłam do google'a.

0

W tym miejscu ja bym sie zastanowil czy musisz te 60tys miec na raz w pamieci, czy nie mozesz tego jakos streamowac.

0

Niestety muszę odczytać wszystko ...:/ Mogłem źle się wysłowić jeżeli chodzi o tą pamięć...Ale fakt jest jeden. Że jak próbuję operować na kolekcjach mając 60 tys danych (może troszkę więcej) to program liczy i liczy... Natomiast gdy wrzucę dane do tablicy...obliczenia lecą w senkundzie :) Zwiększałem nawet dwu- i trzykrotnie ilość danych w tablicy w porównaniu do kolekcji. rezultat ten sam.

Myślałem że może jest jakiś ciekawy trick-sposób który pozwala na wrzucenie do dwuwymiarowej tablicy dlatego napisałem tego posta :)

Zawsze pozostaje mi utworzenie tylu wierszy w tablicy żeby mieć pewność że wszystkie dane się w niej pomieszczą (później tylko sprawdzać czy w wierszu są dane).

ps. iooi - to w kolekcje można upychać typy proste?

0

Przecież ArrayList używa do przechowywania danych wewnętrznych tablic. Bez większego problemu możesz też szybko stworzyć dynamiczną tablicę typów prostych, w tym strukturę dwuwymiarową. Jest nawet gotowy abstrakcyjny kadłubek takiej kolekcji AbstractCollection. Wystarczy, żeby klasa zrobiona na jego bazie sensownie implementowała interfejs RandomAccess i przeciążała odpowiednie metody.

0

No ale przecież po to są tablice właśnie - by stosować je do obliczeń. Po co w ogóle mieszać w to listy i kolekcje? Masz typ prosty x i jakiś inny typ prosty y i moze jeszcze z,k,n ... dajesz to do tablicy wielowymiarowej i działąsz jak na inżyniera przystało. Listy i kolekcje, kolejki to fajna rzecz dla pisania obiektowego ale obliczenia matematyczne na nk próbkach to jednak stare i szybkie proceduralne klepanie.

Jak przyjde do pracy to podeśle Ci linki do rozwiązań javovych jeszcze bardziej przyśpieszajacych obróbkę takich danych.

0

Ale on nie wie chyba ile jest tych danych? Wiec nie zna wielkosci tablicy zanim ja utworzy.
Co do powolnosci kolekcji - to mozna ich tak uzywac, ze sa katastrofalnie wolne. Np, mozna uzywac LinkedList i zamiast iteratora leciec w petli for i uzywac getElementAt(); albo mozna miec ArrayList, ciagle cos do niej dodawac, przez co w koncu jej tablica zapelni sie i musi nastapic wielkie kopiowanie. Biorac pod uwage ze ArrayList z defauta ma 10 elementow, kazde kopiowanie w java 6 zwieksza wewnetrzna tablice wg formulki (oldCapacity * 3)/2 + 1 (poltorakrotnie), latwo wyliczyc ile takich kopiowac sie odbywa, i z iloma elementami musi radzic sobie to ostatnie. Jestes pewien ze problem polega na obliczeniach, a nie na zapelnianiu kolekcji / iteracji / wtf?

0

W programowaniu nie jestem niczego pewien D:D

Gdy używałem kolekcji do zapisywania takiej dużej ilości danych to gdy wrzucałem run to liczyło bardzo długo(czasem gdy przesadziłem z próbkami wyrzucało java heap space).
Jak sprawdzałem na profile'u to właśnie ta metoda w której było zapisywanie do kolekcji zżerała najwięcej czasu.

lipkerson...dzięki za linki...jutro będę sprawdzał czy coś mi wyjdzie :)

0
remigio napisał(a)

W programowaniu nie jestem niczego pewien D:D

To jestli chcesz pracowac w branzy i byc dobrym to 'programming by coincidence' nie jest dobra droga ;d

remigio napisał(a)

Gdy używałem kolekcji do zapisywania takiej dużej ilości danych to gdy wrzucałem run to liczyło bardzo długo(czasem gdy przesadziłem z próbkami wyrzucało java heap space).
Jak sprawdzałem na profile'u to właśnie ta metoda w której było zapisywanie do kolekcji zżerała najwięcej czasu.

No to pewnie uzywales tej ArrayList, i w momencie gdy miales np 32mb max pamieci dla Javy, kolekcja zajmowala juz np 15, Java chciala zaalokowac nowa tablice do kopiowania i nie dala rady bo nie styklo pamieci.

0

Zarcik puściłem : )

W programowaniu nie da się nic zrobić na czuja D:D

Znaczy mi się nigdy nie udało....

1 użytkowników online, w tym zalogowanych: 0, gości: 1