Foro de elhacker.net

Programación => Java => Mensaje iniciado por: neomadara en 1 Mayo 2014, 19:36 pm



Título: consulta ciclo for 100.000.000 de datos en un arraylist
Publicado por: neomadara en 1 Mayo 2014, 19:36 pm
hola buenas! soy nuevo en el foro! y quería hacer una consulta, lo que pasa es que estoy atascado con un ciclo For en cual tiene un Ramdom que me genera números desde 1 a 100.000.000 y los guardar en un ArrayList, y al ejectuarlo el programa funciona unos 5 segundos y luego queda pegado

este seria el codigo.

long numeroGenerado2;
int i;


for(i = 0; i<100000000; i++){
                                    numeroGenerado2 = (long)Math.floor(Math.random()*   (100000000-0+1)+0);
                                    listaNumeros.add(numeroGenerado2);
                                }

probe con variables de tipo int pero aun así pasa lo mismo.
espero alguien me pueda ayudar  ;D


Título: Re: consulta ciclo for 100.000.000 de datos en un arraylist
Publicado por: engel lex en 1 Mayo 2014, 20:52 pm
primero tomando en cuenta que estás haciendo una operación que en memoria debe pesar lo siguiente

long = 64bit = 8byte
entonces son 800.000.000byte, dividiendo entre 1000 por comodidad, con un error de 2.4%
800.000.000byte
800.000KB
800MB

no se demasiado de java, pero creo que tienes que ajustar la memoria para que la maquina virtual pueda usar 1GB de ram

otros consejos:
int es un numero de 32 bits en java, es capaz de soportar un valor de poco más de 2mil millones positivo y negativo

otra cosa que recomiendo es que primero crees el array para que se reserve la memoria, de otra manera se tienes que reubicar la memoria cuando el array quede sin espacio de cola

por otro lado no se si se pueda manejar por métodos normales :s es un array MUY grande


Título: Re: consulta ciclo for 100.000.000 de datos en un arraylist
Publicado por: ivancea96 en 1 Mayo 2014, 22:04 pm
Deberías ver si realmente buscas usar tanta RAM. Quizás prefieras ir guardando los valores en un archivo. Todo depende de lo que busques claro, pero es bastante bestia. Ya viste los datos que te dió engel lex.