Duda básica ArrayList - Java x.add(0,x);

crayWolf

A ver si me resolvéis una pequeñita duda...

Al cargar un arrayList con sus valores,dentro del bucle for no sé que poner al final para introducir esta clase dentro del arrayList...
es decir:

 
    Alumno alum;
    int i=0;int n;
    String nombre;
    String ciclo;
    
System.out.println("Cuantos alumnos va a introducir?:"); n=Integer.parseInt(lee.readLine()); for (i=0;i<n;i++) { alum = new Alumno (); System.out.println("Introduce nombre:"); nombre=lee.readLine(); alum.setNombre(nombre); System.out.println( "Ciclo que cursa "+alum.getNombre()+" : "); ciclo=lee.readLine(); alum.setCiclo(ciclo); System.out.println("En que curso esta:"); alum.setCurso(lee.readLine()); System.out.println("Nota de programacion:"); alum.setNotaP(Float.parseFloat(lee.readLine())); System.out.println("Nota de base de datos:"); alum.setNotaBD(Float.parseFloat(lee.readLine())); System.out.println("Nota de sistemas informaticos:"); alum.setNotaSI(Float.parseFloat(lee.readLine())); al.add(0,alum); }

Debería poner un 0? un contador? para que sirve eso?xD

cabron

Te recomiendo que te acostumbres a intentar resolver este tipo de dudas consultando la documentación del api de java, no por que esté mal que lo preguntes, si no por que es bastante más rápido

http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#add(int , E)

http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#add(E)

La diferencia entre add(x) y add(0,x) es que add(x) va añadiendo los elementos al final, mientras que add(0,x) los añade al principio.

LLoid
al.add(0,alum);

te irá escribiendo siempre alum en la posición 0 de al, de manera que irá "pisando" los valores anteriores,

al.add(alum);

te los irá escribiendo uno detrás de otro en el array.

crayWolf

Entonces si pongo 10,x escribirá la posición 11 d nuevo no?

1 respuesta
cabron

#4

Sí, pero no pierdes lo que hubiese en esa posición, si no que se crea una posición más y lo que hubiese se desplaza. ej:

["hola"],["adios"]

si haces add(1,"hasta luego" ), pasas a tener:

["hola"],["hasta luego"],["adios"]

2 respuestas
crayWolf

#5 entendido ,muchas gracias :clint:

LLoid

Lleva razón #5, al.add(0, alum); no sustituye el valor anterior, me he colado ahí.

elkaoD

Como curiosidad, decir que .add(int, object) es lento, más cuanto más al principio del ArrayList esté (aunque O(n) siempre) porque tiene que copiar todos los elementos desde index hasta el final.

.add sin índice es O(1)

2
pdj

Y si sabes el tamaño que va a tener, usa una array normal :)

Usuarios habituales

  • pdj
  • elkaoD
  • LLoid
  • crayWolf
  • cabron