Autor Wątek: Tablica obiektów templatowych  (Przeczytany 5513 razy)

Offline Troll

  • Użytkownik
    • Oficjalna strona gry Gizarma

# Styczeń 24, 2009, 03:07:32
Witam

Moim celem było utworzenie tablicy obiektów templatowych

na początku zrobiłem to:

ArrayList<Integer> intList[];
...
intList = new ArrayList<Integer>[size];


ale to wywołuje błąd. Natomiast

ArrayList<Integer> intList[];
...
intList = new ArrayList[size];


działa, ale wyrzuca warninga.

Czy ktoś wie co zrobic aby pozbyc się errorów i warningów?

Offline Mr. Spam

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

Offline Esidar

  • Użytkownik


Offline Troll

  • Użytkownik
    • Oficjalna strona gry Gizarma

# Styczeń 24, 2009, 19:32:10
Matko boska na widok Google zwijam się w kąt i płaczę

Chyba mnie nie zrozumiałeś, mi chodzi o to jak stworzyc tabilcę obiektów templatowych (generycznych). Jak działa ArrayList to ja wiem!!!!

Offline Fiołek

  • Użytkownik
    • Blog

# Styczeń 24, 2009, 20:11:06
Cytat: Tutorial podany przez Esidara
Kod: (java) [Zaznacz]
ArrayList<String> myArr = new ArrayList<String>();
A dokładniej jest to 13. linijka.

Offline Troll

  • Użytkownik
    • Oficjalna strona gry Gizarma

# Styczeń 24, 2009, 23:13:07
Cytat: Tutorial podany przez Esidara
Kod: (java) [Zaznacz]
ArrayList<String> myArr = new ArrayList<String>();
A dokładniej jest to 13. linijka.

Mi chodziło by raczej o coś takiego

ArrayList<String> myArr[] = new ArrayList<String>[size];

tylko, jak już pisałem, to nie działa

Offline skowronkow

  • Użytkownik
    • skowronkow devsite

# Styczeń 24, 2009, 23:36:25
Chyba jednak nie wiesz co to ArrayList (zwracam uwage na czlon "List"). Jesli juz chodzi Ci o to zeby ArrayList mialo zdefiniowana poczatkowa pojemnosc to podajesz jej rozmiar w konstruktorze czyli:

ArrayList<String> myArr[] = new ArrayList<String>(size);
Jednak nie znaczy to ze nie mozesz dodac do niej wiecej elementow niz size. Mozesz, zostanie wtedy zreallokowana jej pojemnosc o pewna wartosc (ktora mozna tez ustalic).

Tobie chyba chodzi o zwykla tablice. Jednak zanim zapytasz o kolejne błachostki wynikajace z czystego lenistwa dowiedz sie co chciales zrobic a potem wez jakas ksiazke o podstawach Javy i po porstu ja przeczytaj.

Offline skowronkow

  • Użytkownik
    • skowronkow devsite

# Styczeń 24, 2009, 23:41:14
Tak pod postem zeby byla jasnosc.

Wydaje mi sie ze to jakas podpucha. Jesli Troll choc troche uzywa swojej rozczochranej (a wydaje sie ze przynajmniej w minimalnym stopniu tak jest bo np wie co to Java) to nie zadawałby takich pytan. Naukę programowania w kazdym badz razie powinna poprzedzac nauka myślenia. eh

Offline Troll

  • Użytkownik
    • Oficjalna strona gry Gizarma

# Styczeń 25, 2009, 00:52:42
Chyba NIE rozumiesz o co mi chodzi. Chcę utworzyc tablicę, której elementami będą referencje do ArrayList<coś tam>. Czyli jakby tablicę dwuwymiarową w której jeden indeks ma narzucony z góry zakres (dla tego wsadzam te ArrayListy w normalną tablicę), natomiast drugi ma miec zakres "modyfikowalny" (dla tego w tablicy są referencje do ArrayListy, które jak wiadomo nie mają narzuconej wielkości i w każdej chwili można użyc genialnej metody Add() ).

Do takiego tworu będe odwoływał się później w następujący sposób

ArrayListy<String> tmp[];
...
tmp[x].get(y) = [String odpowiadający indeksom x,y, gdzie x = 0, ... ,size; y = 0, ... ,??? ]

Oczywiste jest chyba, że to

ArrayList<String> myArr = new ArrayList<String>();
...
myArr.get(x) = [String odpowiadający indeksowi x, gdzie x = 0, ... ,??? ]

robi co innego prawda?

Nikt chyba nie zrozumiał o co mi chodzi, może niejasno piszę, ale wydawało mi się, że mój problem nie jest zbyt skomplikowany.

Jesli Troll choc troche uzywa swojej rozczochranej (a wydaje sie ze przynajmniej w minimalnym stopniu tak jest bo np wie co to Java) to nie zadawałby takich pytan. Naukę programowania w kazdym badz razie powinna poprzedzac nauka myślenia. eh

Człowieku, Jave znam dośc dobrze nie od dziś i o programowaniu też co nie co wiem. Może zanim zaczniesz pisac takie komentarze, najpierw spróbuj przeczytac i zrozumiec poprzednie posty!!!


Offline skowronkow

  • Użytkownik
    • skowronkow devsite

# Styczeń 25, 2009, 02:57:51
Cytuj
Jesli Troll choc troche uzywa swojej rozczochranej (a wydaje sie ze przynajmniej w minimalnym stopniu tak jest bo np wie co to Java) to nie zadawałby takich pytan. Naukę programowania w kazdym badz razie powinna poprzedzac nauka myślenia. eh

Człowieku, Jave znam dośc dobrze nie od dziś i o programowaniu też co nie co wiem. Może zanim zaczniesz pisac takie komentarze, najpierw spróbuj przeczytac i zrozumiec poprzednie posty!!!


Postaram sie, chociaz wolałbym sie nie starac.

ArrayList<Integer> intList[];
...
intList = new ArrayList[size];

Nie czytajac powyzszej czesci mialem na mysli dokladnie to o co Ci chodzilo. Pzdr
« Ostatnia zmiana: Styczeń 25, 2009, 03:02:49 wysłana przez skowronkow »

Offline kamykadze

  • Użytkownik

# Styczeń 26, 2009, 10:12:07
@Troll -> próbujesz robić zaawansowany myk. Są chyba problemy w Javie z tworzeniem tablicy obiektów generycznych.

Na szybko przeczytaj to :
http://forums.sun.com/thread.jspa?threadID=530823

EDIT:
Od biedy możesz zrobić listę list.
Coś w tym stylu :

public ArrayList<ArrayList<String>> tab = new ArrayList<ArrayList<String>>(rozmiar);
« Ostatnia zmiana: Styczeń 26, 2009, 11:59:01 wysłana przez kamykadze »

Offline JCoder

  • Użytkownik

# Styczeń 26, 2009, 17:58:00
Daj mu:
@SuppressWarnings("unchecked")

i nie będzie się rzucał. Niestety z powodu zachowania wstecznej kompatybilności, genericsy są "broken by design" w Javie :(
W runtime ArrayList<Costam> zamieniane jest na zwykły ArrayList i nie wiadomo jakie jest to Costam, a kompilator generuje warningi, że rzutowania typów generycznych nie są sprawdzane w runtime.


Offline Troll

  • Użytkownik
    • Oficjalna strona gry Gizarma

# Styczeń 27, 2009, 01:29:15

@Troll -> próbujesz robić zaawansowany myk. Są chyba problemy w Javie z tworzeniem tablicy obiektów generycznych.

Na szybko przeczytaj to :
http://forums.sun.com/thread.jspa?threadID=530823

Faktycznie, to wyjaśnia wszystko

Daj mu:
@SuppressWarnings("unchecked")

Tyle to już wiem, myślałem, że istnieje jakiś bardziej elegancki sposób. No ale jak widac nie wszystkie problemy da się elegancko rozwiązac.

Od biedy możesz zrobić listę list.
Coś w tym stylu :

public ArrayList<ArrayList<String>> tab = new ArrayList<ArrayList<String>>(rozmiar);

Jest to jakieś rozwiązanie, ale zalerzało mi, żeby dostęp do tej struktury był w miare szybki. Wychodzę z założenia, że najszybszą strukturą jest zwykła tablica.

Dzięki za odpowiedź

Offline kamykadze

  • Użytkownik

# Styczeń 28, 2009, 12:38:32
ArrayList jest oparta na tablicy. W konstruktorze możesz jej nadać początkową wartość. Jeśli się w niej nie miesza, będzie w miarę szybka.

Offline JCoder

  • Użytkownik

# Styczeń 30, 2009, 14:57:15
Szybkość dostępu dla ArrayLista jest taka sama jak do tablicy. Kompilator rozwija wywołania w miejscu wystąpienia i upraszcza kod.