Qual è il valore massimo dell'indice di un ArrayList?

4

Ci stavo pensando. Potresti avere accesso a una memoria infinita (un computer con molta RAM) in modo da poter continuare ad aggiungere altri elementi al tuo ArrayList.

Tuttavia, penso che sia possibile accedere agli elementi BY INDICE solo fino a un certo valore di indice. La dimensione massima di questo indice potrebbe essere = il numero massimo che il tuo computer può rappresentare, che è lungo 9,223,372,036,854,775,807 in Java.

So che puoi accedere all'elemento NEXT usando un iteratore. Ma come accedo agli elementi dopo l'indice TH (9.223.372.036.854.775.807), usando un numero indice?

    
posta Jedi Knight 18.03.2013 - 01:40
fonte

2 risposte

14

ArrayList in Java ha un get ( indice int) metodo. int è un valore a 32 bit con segno, con un valore massimo di 2.147.483.647. Questo è il più grande valore possibile a cui è possibile accedere in un ArrayList . Periodo. Le specifiche di ciò che la dimensione massima del array o ArrayList differe si basa sull'implementazione della JVM (che può essere inferiore al valore MAX_INT ). Non puoi creare un ArrayList (o, per questo, un array int[] ) con long per il suo indice.

Se dovessi tentare di creare un'istanza di un elenco di array di questa grandezza, avresti una struttura di almeno 8 gigabyte: questo rappresenta solo i puntatori MAX_INT e non lo spazio aggiuntivo dei dati in ogni punto.

Il tentativo di accedere oltre il valore massimo consentito tramite un iteratore associato all'array probabilmente si tradurrà in uno di OutOfMemoryException , IndexOutOfBoundsException o NoSuchElementException a seconda dell'implementazione.

Questo è un uso molto poco pratico della memoria. Se si volesse una tale struttura di dati, si dovrebbero investigare approcci meno intensivi della RAM come database, array sparsi e simili.

    
risposta data 18.03.2013 - 02:07
fonte
7

Per gli array normali, se si utilizza la JVM Oracle di serie, sembra che la risposta effettiva è MAX_INT-5 o MAX_INT-2 a seconda della versione.

Per ArrayList la risposta sembra essere MAX_INT-8 . (Linea 191, poiché apparentemente il codice sorgente non ha ancora punti di ancoraggio da collegare!)

    
risposta data 18.03.2013 - 06:48
fonte

Leggi altre domande sui tag