Domanda

Mettendo da parte la capacità del mucchio, ci sono modi per andare al di là dei vincoli Integer.MAX_VALUE in Java?

Gli esempi sono:

  1. Collezioni si limitano a Integer.MAX_VALUE.
  2. StringBuilder / StringBuffer si limitano a Integer.MAX_VALUE.
È stato utile?

Soluzione

Se si dispone di una collezione enorme si sta andando a colpire tutti i tipi di limiti pratici, prima avete mai 2 31 - 1 articoli in esso. Una collezione con un milione di articoli in esso sta per essere abbastanza ingombrante, per non parlare di uno con più di mille volte di più.

Allo stesso modo, uno StringBuilder può costruire una stringa che è 2 GB di dimensione prima che colpisca il MAX_VALUE limite, che è più che sufficiente per qualsiasi scopo pratico.

Se veramente si pensa che si potrebbe colpire questi limiti l'applicazione dovrebbe essere la memorizzazione dei dati in un modo diverso, probabilmente in un database.

Altri suggerimenti

Con una lunga? Funziona per me.

Modifica: Ah, un chiarimento della questione. Freddo. La mia nuova e migliorata risposta:

Con un algoritmo di paginazione.

Per coincidenza, un po 'di recente per un'altra domanda ( la ricerca binaria in un file ordinato (mappato in memoria?) in java ) , ho montata su un algoritmo di paginazione per aggirare i em> int

È possibile creare una tua raccolta che hanno una lunga size () sulla base del codice sorgente di quelle collezioni. Per avere più grandi array di oggetti, ad esempio, si può avere un array di array (e cucire questi insieme)

Questo approccio permetterà quasi 2 ^ 62 elementi.

Array indici sono limitate da Integer.MAX_VALUE, non le dimensioni fisiche della matrice.

Pertanto, la dimensione massima di un array è legata alla dimensione della matrice di tipo.

byte = 1 byte => max  2 Gb data
char = 2 byte => max  4 Gb data
int  = 4 byte => max  8 Gb data
long = 8 byte => max 16 Gb data

I dizionari sono una storia diversa perché utilizzano spesso tecniche come secchi o un layout di dati interno come un albero. Pertanto questi "limiti" di solito dont applicare o avrete bisogno di ancora più dati per raggiungere il limite.

Breve: Integer.MAX_VALUE in realtà non è un limite perché è necessario un sacco di memoria per raggiungere in realtà il limite. Se si dovrebbe mai arrivare a questo limite si potrebbe desiderare di pensare a migliorare il vostro algoritmo e / o dati layout:)

Sì, con classe BigInteger.

Un aggiornamento della memoria è necessario ..:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top