Pergunta

Pondo de lado a capacidade da pilha, existem maneiras de ir além dos limites Integer.MAX_VALUE em Java?

Os exemplos são:

  1. coleções limitar-se a Integer.MAX_VALUE.
  2. StringBuilder / StringBuffer limite-se a Integer.MAX_VALUE.
Foi útil?

Solução

Se você tem uma enorme coleção que você está indo para atingir todos os tipos de limites práticos antes você já 2 31 - 1 itens. Uma coleção com um milhão de itens em que vai ser muito complicado, muito menos um com mais de milhares de vezes mais do que isso.

Da mesma forma, um StringBuilder pode construir uma String que é 2GB de tamanho antes de atingir o limite MAX_VALUE que é mais que suficiente para qualquer finalidade prática.

Se você realmente acha que você pode estar batendo esses limites a sua aplicação deve ser armazenar seus dados de uma maneira diferente, provavelmente em um banco de dados.

Outras dicas

Com um tempo? Funciona para mim.

Editar: Ah, o esclarecimento da questão. Legal. Minha resposta nova e melhorada:

Com um algoritmo de paginação.

Por coincidência, um pouco recentemente para outra pergunta ( busca binária em um arquivo (? de memória mapeada) ordenados em java ) , eu chicoteado até um algoritmo de paginação para contornar os int parâmetros em a API java.nio.MappedByteBuffer.

Você pode criar as suas próprias coleções que têm um longo size () baseado no código fonte para essas coleções. Para ter matrizes maiores de objetos, por exemplo, você pode ter uma matriz de matrizes (e costura-los juntos)

Esta abordagem permitirá quase 2 ^ 62 elementos.

Matriz <> fortes índices são limitados por Integer.MAX_VALUE, não o tamanho físico da matriz.

Portanto, o tamanho máximo de uma matriz está ligado ao tamanho do tipo de matriz.

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

Os dicionários são uma história diferente, porque eles muitas vezes usam técnicas como baldes ou um layout de dados interno como uma árvore. Portanto estes "limites" geralmente não se aplicam ou você vai precisar ainda mais dados para atingir o limite.

curta: Integer.MAX_VALUE não é realmente um limite porque você precisa de muita memória para realmente atingir o limite. Se você nunca deve atingir esse limite, você pode querer pensar sobre como melhorar o seu algoritmo e / ou dados de layout de:)

Sim, com classe BigInteger.

Um upgrade de memória é necessário ..:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top