Avatar billede kludder9220 Nybegynder
04. januar 2008 - 16:46 Der er 2 kommentarer

Hastighed af HashMap vs Array

I en java applikation er der konstrukturet to forskellige data type implementationer, for at håndtere data fra en radar. Data har formatet 240x240 felter og 15 lag som ligesom i en lagkage ligger ovenpå hinanden.
Den ene data type er et multidimentional grid af bytes (bytes[][][] grid = new byte[15][240][240]).
Og den anden er et HashMap med et Point object som key og et TreeMap som value object med de 15 lag for et felt.
Ved en test med 100.000 forespørglser med data i alle felterne,  outperformer HashMapet klart vores Array...??? HashMap, 30 millisekunder med Array, 650ms... Det er stik i mod forventningerne???. Dog skal det siges at vores læsning ikke prøver at gøre brug af Row Order Major'ing, selv om array'et har denne struktur. Hvoffor er HashMappet så hurtig???
Avatar billede Slettet bruger
04. januar 2008 - 17:03 #1
Der er sikkert nogle kloge hoveder der kan svare uden, men ellers ville et minimalt test-eksempel være alle tiders.
Avatar billede jakoba Nybegynder
05. januar 2008 - 06:08 #2
Java compileren optimerer og det giver nogen gange uforudsete effekter.

Her tror jeg det handler om at i i jeres program kikker på eet punkt i alle 15 lag før i går videre til det næste punkt. prøv at definere arrayet som
    byte[][][] grid = new byte[240][240][15];  // dybde flyttet til bagerste index
og se om ikke det gør en gevaldig forskel. (fordi compileren nu kan optimere ved at 'huske' x,y indeks udregningen og så bare lægge 0..14 til for dybden

Noget andet der evt kunne speede arrayet op er at bruge størrelser der er 2^?. fx:
    byte[][][] grid = new byte[256][256][16];  // 256 == 2^8; 16 = 2^4

mvh JakobA
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Regnskabsstyrelse

Datadesigner

IT-Universitetet i København

IT-infrastrukturspecialist

Capgemini Danmark A/S

D&A Management Consultant

Capgemini Danmark A/S

SAP Engagement Manager