Question

Mis à part la capacité du tas, sont là les moyens d'aller au-delà des contraintes Integer.MAX_VALUE en Java?

Les exemples sont:

  1. Collections se limitent à Integer.MAX_VALUE.
  2. StringBuilder / StringBuffer se limitent à Integer.MAX_VALUE.
Était-ce utile?

La solution

Si vous avez une énorme collection que vous allez frapper toutes sortes de limites pratiques avant que vous ayez jamais 2 31 - 1 éléments qu'il contient. Une collection avec un million d'éléments qu'il va être assez difficile à manier, et encore moins un avec plus de mille fois plus que cela.

De même, un StringBuilder peut construire une chaîne qui est de 2 Go en taille avant qu'elle ne touche la limite qui est plus MAX_VALUE que suffisant à des fins pratiques.

Si vous pensez vraiment que vous pourriez frapper ces limites l'application doit être le stockage de vos données d'une manière différente, probablement dans une base de données.

Autres conseils

Avec une longue? Fonctionne pour moi.

Edit: Ah, la clarification de la question. Cool. Mon nouveau et amélioré réponse:

Avec un algorithme de recherche de personnes.

Par coïncidence, un peu récemment pour une autre question ( recherche binaire dans un fichier classé (? mappé en mémoire) en java ) , je fouetté un algorithme de recherche de personnes pour contourner les paramètres int l'API java.nio.MappedByteBuffer.

Vous pouvez créer vos propres collections qui ont une longue taille () basée sur le code source de ces collections. Pour avoir de plus grandes matrices d'objets par exemple, vous pouvez avoir un tableau de tableaux (et point ceux-ci ensemble)

Cette approche permettra presque 2 ^ 62 éléments.

array index sont limitées par Integer.MAX_VALUE, pas la taille physique du tableau.

Par conséquent, la taille maximale d'une matrice est liée à la taille du type de réseau.

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

Les dictionnaires sont une autre histoire, car ils utilisent souvent des techniques comme des seaux ou une mise en page de données internes comme un arbre. Par conséquent, ces « limites » dont généralement appliquez ou vous aurez besoin encore plus de données pour atteindre la limite.

Court: Integer.MAX_VALUE est pas vraiment une limite parce que vous avez besoin de beaucoup de mémoire pour atteindre effectivement la limite. Si jamais vous atteindre cette limite, vous voudrez peut-être penser à améliorer votre algorithme et / ou des données de mise en page:)

Oui, la classe BigInteger.

Une mise à niveau de mémoire est nécessaire ..:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top