ArrayList<Long> num = new ArrayList();
for(long i = 0L; i < 10000000000L; i++) { //10 BILHÕES
num.add(i);
num.get(i);
}
Tanto add quanto get recebem (int index). Na linha do num.add(i), sendo i um long, não é apresentado erro na linha . Mas na linha do num.get(i) é apresentado um erro de converssão de long para int. Porque isso acontece só com o get mesmo ele recebendo o mesmo parâmetro de add ?
Na verdade o método add recebe um elemento do tipo que você definiu.
Exemplo:
ArrayList<String> nomes = new ArrayList<String>();
nomes.add("João");
Como você definiu como Long, o que ele aceita é um elemento do tipo Long.
Já o método get recebe um inteiro, que é o índice onde o elemento que você quer se encontra.
Exemplo:
ArrayList<String> nomes = new ArrayList<String>();
nomes.add("João");
nomes.get(0); // João
@SkyG0D desculpa, esqueci de mecionar a dúvida em si. Já que get só pode receber um inteiro, e meu ArrayList (10.000.000.000) ultrapassa o limite de um inteiro (2.147.483.647), como eu poderia acessar um elemento da lista de 10BI que estivesse acima de 2.147.483.647?
Eu nunca me perguntei sobre isso. Porém se você tem alguma estrutura de dados que tem mais de 2.147.483.647 de elementos, creio que uma ArrayList não seja uma boa forma de armazenar esses dados.
Recomendo criar uma nova perguntar ou deixar essa aberta, pra ver se alguém consegue te responder.
Um long em Java ocupa 64 bits (8 bytes). Se a lista for guardar 10 bilhões de números, precisará de mais de 74 gigabytes de memória (fora a própria estrutura do ArrayList).
Então sugiro que repense sua estrutura. O que exatamente você está tentando fazer, precisa mesmo ter todos esses valores na memória ao mesmo tempo, etc?
Só complementando oq a galera ta falando, para recuperar valores de um ArrayList da forma que você está pensando use o EntrySet ao invês de .get(), o get pega pela posição do objeto dentro do ArrayList, já o EntrySet é possível recuperar o objeto especifico se bem estruturado num for.
E o problema não é nem pegar o item e sim que o ArrayList simplesmente não pode conter mais do que Integer.MAX_VALUE (um pouco menos dependendo da implementação) já que ele armazena os elementos internamente num array comum e não dá pra criar um array comum usando long.