ELR Skrevet 6. juni 2005 Rapporter Del Skrevet 6. juni 2005 Har en ArrayList som dette: ArrayList<Long> primtall = new ArrayList<Long>(). Hvor mange elementer kan settes i denne listen egentlig? Grunnen til at jeg spør er fordi maskinen risikerer å fylle lista med rundt 30mill. elementer nå...... Lenke til kommentar
threiran Skrevet 7. juni 2005 Rapporter Del Skrevet 7. juni 2005 Størrelsen på en ArrayList er nok oppad begrenset av minnet satt av til javas virtuelle maskin. Husk at dette ikke nødvendigvis er det samme som minnet i maskinen din. Det skal finnes et argument som kan legges ved fra kommandolinjen. Skriv "java -X" så finner du nok det argumentet du trenger. CPL Lenke til kommentar
Valagar Skrevet 7. juni 2005 Rapporter Del Skrevet 7. juni 2005 Når du instansierer en ny ArrayList vil den opprette en Object-array med plass til 10 elementer (eller det du måtte oppgi i konstruktøren). Du kan også oppgi hvilken type array du vil ha ved å skrive ArrayList<String>, da vil det opprettes en tilsvarende stor String[]. Når du så legger inn nye elementer vil det kontrolleres at det er plass i tabellen. Hvis tabellen er full økes kapasiteten slik: int newCapacity = (oldCapacity * 3)/2 + 1; Gir du startkapasitet 10 og legger til 11 elementer har du altså en tabell med plass til 16 elementer. Fyller du opp den økes tabellen til 25, og så videre. Den gamle informasjonen kopieres over. Dette er egentlig ikke et svar på spørsmålet ditt, svaret er vel ganske enkelt at dette begrenses av hvor mye minne Java får lov til å bruke, men det er alltid kjekt å vite litt om klassene man bruker, selv om de er ferdiglaget! Lenke til kommentar
ELR Skrevet 7. juni 2005 Forfatter Rapporter Del Skrevet 7. juni 2005 Man lærer så lenge man lever! Fin informasjon! Takk skal du ha! Lenke til kommentar
Huscht Skrevet 4. oktober 2005 Rapporter Del Skrevet 4. oktober 2005 Når du instansierer en ny ArrayList vil den opprette en Object-array med plass til 10 elementer. Når du så legger inn nye elementer vil det kontrolleres at det er plass i tabellen. Hvis tabellen er full økes kapasiteten slik: int newCapacity = (oldCapacity * 3)/2 + 1; Gir du startkapasitet 10 og legger til 11 elementer har du altså en tabell med plass til 16 elementer. Fyller du opp den økes tabellen til 25, og så videre. Den gamle informasjonen kopieres over. Har du en link til site dette forklares på? Jeg har problemer med å finne dette selv, og en referanse til en post på et forum tror jeg ikke holder som en referanse i en oppgave. Kjekk info forresten! Lenke til kommentar
mikaelandre Skrevet 4. oktober 2005 Rapporter Del Skrevet 4. oktober 2005 står sikkert i api, java.sun.com Lenke til kommentar
buskmann Skrevet 4. oktober 2005 Rapporter Del Skrevet 4. oktober 2005 (endret) Står på linje 167 i ArrayList.java versjon 1.47. Endret 4. oktober 2005 av buskmann Lenke til kommentar
MailMan13 Skrevet 4. oktober 2005 Rapporter Del Skrevet 4. oktober 2005 Hvis du skal la en ArrayList vokse selv til 30 mill vill programmet ditt sannsynligvis bli utrolig tregt når det må begynner å kopiere flere megabyte frem og tilbake hver gang den går full, og du har sannsynligvis ikke plass til så mange objekter i minnet heller (Objekter gir en del minne-overhead). Bruk en LinkedList hvis du absolutt vil bruke ferdige datastrukturer. Finn ut hvor stor plass du trenger og putt dem inn i et statisk long array som er stort nok. Hvor mye minne programmet skal få bruke til heap setter du med -Xmx128m (for 128MB) Lenke til kommentar
mar Skrevet 4. oktober 2005 Rapporter Del Skrevet 4. oktober 2005 (endret) (2^31)-1 er nok den maksimale lengden på en ArrayList. ArrayList indekseres med "int" og dersom vi ser i Java APIen (Integer klassen) finner vi følgende: MAX_VALUE, A constant holding the maximum value an int can have, (2^31)-1. Er ikke 100% sikker på dette, bare 99%. Kan jo være mulig med et eller annet lurt triks, men siden "int" går igjen som parameter og returverdi i svært mange av metodene i ArrayList tviler jeg sterkt på at det er mulig å overstige MAX_VALUE. Endret 5. oktober 2005 av mar Lenke til kommentar
Frankium Skrevet 5. oktober 2005 Rapporter Del Skrevet 5. oktober 2005 Hvordan vil en hashtabell takle utrolig store datamengder da? Den vil vel bli kjappere enn en ArrayList, men tar den like mye data? Er lenge siden jeg jobba me slike datastrukturer, så husker ikke helt hvordan ArrayListen er i forhold til de mer standard strukturene. Lenke til kommentar
yonderboy Skrevet 5. oktober 2005 Rapporter Del Skrevet 5. oktober 2005 Hvis du skal la en ArrayList vokse selv til 30 mill vill programmet ditt sannsynligvis bli utrolig tregt når det må begynner å kopiere flere megabyte frem og tilbake hver gang den går full, og du har sannsynligvis ikke plass til så mange objekter i minnet heller (Objekter gir en del minne-overhead). Bruk en LinkedList hvis du absolutt vil bruke ferdige datastrukturer. Finn ut hvor stor plass du trenger og putt dem inn i et statisk long array som er stort nok. Hvor mye minne programmet skal få bruke til heap setter du med -Xmx128m (for 128MB) Det er vel egentlig ikke strengt tatt nødvendig med noen kopiering fram og tilbake hvis du i utgangspunktet oppretter ArrayListen med en høy kapasitet : ArrayList<Long> primtall = new ArrayList<Long>(30000000); Ellers foregår kopieringen når du øker kapasiteten med en native metode (implementert med pekere tror jeg), så det går raskt, men det vil selvsagt bruke mye mindre minne hvis du ikke bruker wrapper-klassen. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå