/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
3-dim array
Fra : dhek


Dato : 01-08-06 21:46

Hej gruppe,

Lige et hurtigt sprg.. Hvis jeg skal lave et 3-dim array hvor de første 2
dim. altid har fast længde, mens den 3. dim. har variabel længde (dog med et
kendt maksimum), hvordan er det så smartest at lave dette?

- Skal lige siges at den 3. dim kun vil skulle indeholde integers.

Har naturligvis overvejet bare at lave et int[][][], men så får jeg jo ikke
variabel længde på den 3. dim..
Har også overvejet nestet arrayLists, men det virker som en lidt tåbelig
løsning eftersom de første 2. dim. har fast længde.
Burde det så være eks. et object[][], hvor den sidste dim. skulle indeholde
en reference til en arrayList, men denne løsning lyder også lidt rodet
umiddelbart. Så any bright ideas?

På forhånd tak for hjælpen,
Mvh. Daniel



 
 
Johnnie Hougaard Nie~ (01-08-2006)
Kommentar
Fra : Johnnie Hougaard Nie~


Dato : 01-08-06 22:38

dhek wrote:
> Lige et hurtigt sprg.. Hvis jeg skal lave et 3-dim array hvor de første 2
> dim. altid har fast længde, mens den 3. dim. har variabel længde (dog med et
> kendt maksimum), hvordan er det så smartest at lave dette?

Meget kommer an på dine krav til om løsningen skal bruge så lidt plads som muligt
(med mange objekter i luften) og/eller være så nem/pæn som muligt at arbejde med.

Ud fra en antagelse om at begge dele har væsentlig betyding, tror jeg at min
indgang til problemstillingen ville være at betragte den 3. dim som af en
anden "slags" end de 2 første, og derfor lave en klasse som rummer den 3.
dimension. En ArrayList kunne være "fristende", men fordi den altid indeholder
objekter, skal hvert int wrappes i en java.lang.Integer, så det vil give et
ganske stort pladsforbrug. Derfor ville jeg prøve om en løsning kunne baseres
på at lave (eller finde) en "efterligning" af ArrayList, men baseret på en
int[], altså en "IntList".

Og så ellers lave en IntList[][] til at klare de 2 første dimensioner.

tonny.madsen@gmail.c~ (02-08-2006)
Kommentar
Fra : tonny.madsen@gmail.c~


Dato : 02-08-06 12:08

Jeg mener også det betyder noget hvor ofte den 3. dimension ændre
sig. Hvis det sker meget sjældent, kan det måske nok betale sig at
benytte System.arraycopy().

Derudover er der selvfølgelig spørgsmålet om performance... Array er
væsentligt hurtigere end List'er (en faktor 10-20 alt efter brugen).

/tonny

Johnnie Hougaard Nielsen wrote:
> dhek wrote:
> > Lige et hurtigt sprg.. Hvis jeg skal lave et 3-dim array hvor de første 2
> > dim. altid har fast længde, mens den 3. dim. har variabel længde (dog med et
> > kendt maksimum), hvordan er det så smartest at lave dette?
>
> Meget kommer an på dine krav til om løsningen skal bruge så lidt plads som muligt
> (med mange objekter i luften) og/eller være så nem/pæn som muligt at arbejde med.
>
> Ud fra en antagelse om at begge dele har væsentlig betyding, tror jeg at min
> indgang til problemstillingen ville være at betragte den 3. dim som af en
> anden "slags" end de 2 første, og derfor lave en klasse som rummer den 3.
> dimension. En ArrayList kunne være "fristende", men fordi den altid indeholder
> objekter, skal hvert int wrappes i en java.lang.Integer, så det vil give et
> ganske stort pladsforbrug. Derfor ville jeg prøve om en løsning kunne baseres
> på at lave (eller finde) en "efterligning" af ArrayList, men baseret på en
> int[], altså en "IntList".
>
> Og så ellers lave en IntList[][] til at klare de 2 første dimensioner.


Thorbjørn Ravn Ander~ (02-08-2006)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 02-08-06 16:07

"tonny.madsen@gmail.com" <tonny.madsen@gmail.com> writes:

> Derudover er der selvfølgelig spørgsmålet om performance... Array er
> væsentligt hurtigere end List'er (en faktor 10-20 alt efter brugen).

Også for en ArrayList? Går ud fra at get()'en bliver inlinet.

--
Thorbjørn Ravn Andersen

tonny.madsen@gmail.c~ (03-08-2006)
Kommentar
Fra : tonny.madsen@gmail.c~


Dato : 03-08-06 09:14

Tjaa, det kommer meget an på hvordan programmet er struktureret.
Normalt ville jeg sige at man altid skal benytte interfacer (her List)
og så kan oversætteren kun sjældent inline helt.

Der er også problemer omkring gennemløb at ArrayList i en for-løkke
- oversætteren kan lave noget temmeligt optimeret kode for Array
kontra ArrayList.

Og ikke mindst er der meget store forskelle på de forskellige JIT
(just-in-time) implementeringer i de forskellige VM'er. Nogle laver
dynamisk analyse og kan overkomme ovenstående problemer, men det er
ikke helt almindeligt endnu - og giver i øvrigt sine helt egne
problemer da noget af koden skal oversættes i flere versioner alt
efter den nøjagtive brug (parametriseret ved argumenter og lokale
variable)... hvilket koster blandt i lagerforbrug.

Suma-sumarum: hvis det ikke er et stor administrativt problem og koden
kan koncentreres et sted -- hvilket ofte er tilfældet -- så ville jeg
altid foretrække int[][][] frem for ArrayList<int[][]>

Når alt kommer til alt, så må det siges at være et spørgsmål om
temperament...

/tonny

Thorbjørn Ravn Andersen wrote:
> "tonny.madsen@gmail.com" <tonny.madsen@gmail.com> writes:
>
> > Derudover er der selvfølgelig spørgsmålet om performance... Array er
> > væsentligt hurtigere end List'er (en faktor 10-20 alt efter brugen).
>
> Også for en ArrayList? Går ud fra at get()'en bliver inlinet.
>
> --
> Thorbjørn Ravn Andersen


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste