ArrayList
La clase ArrayList (java.util) es una objeto lista que implemente la interfaz Collection de java. Esta clase permite contener y ordenar objetos, incluso, puede almacenar objetos dupicados. Su tamaño es dinámico, es decir, esta lista crecera a medida que se inserten en ella mas elementos. Debememos recordar que el índice de un ArrayList empieza en 0, es decir, el primer elemento del ArrayList tiene como índice el 0
Nota: Los objetos ArrayList se comportan igual que un objeto Vector desincronizado, por lo tanto, un ArrayList se ejecuta mas rápido que un Vector, ya que el ArrayList no tiene que implementar los métodos de sincronización de procesos.
Agregar elementos
El ArrayList contendrá diversos elementos que debemos gestionar, para agregar elementos, se puede hacer de dos formas usando el método add(…) que recibe por parámetro un objeto de tipo Object:
• La primera forma sería insertalo sin darle una posición específica, entonces, por defecto el elemento será agregado al final:
// instanciamos un nuevo ArrayList
ArrayList mi_lista = new ArrayList();
// agregamos el elemento, por defecto lo agregará de último
mi_lista.add("elemento 1");
• La segunda forma sería dandolé una posición específica en el la lista. Si se dá el caso de que el elemento que vamos a insertar en un índice donde ya hay un elemento, la lista, por definicion el elemento insertado y todos a la derecha de él se correrán una posición a la derecha:
// instanciamos un nuevo ArrayList ArrayList mi_lista = new ArrayList(); // agregamos el elemento, por defecto lo agregará de último mi_lista.add(1, "elemento A");
Eliminar Elementos
Para eliminar elementos se dispone de el método remove(…) en el cual se recibe como argumento el objeto (sí, el objeto) o eleminar el elemento conociendo su indice el índice (posición).
Para este ejemplo supongamos que tenemos una clase Persona, que tiene nombre y edad, insertaremos unos cuantas personas en la lista y luego eliminaremos una de ellas usando las dos formas
• Eliminado según su índice en la lista
Persona persona_1 = new Persona("Julian", 20);
Persona persona_2 = new Persona("Bety", 17);
Persona persona_3 = new Persona("Marta", 22);
ArrayList mi_lista = new ArrayList();
// agregamos unos cuantos elementos
mi_lista.add(persona_1);
mi_lista.add(persona_2);
mi_lista.add(persona_3);
// la estructura de a lista ha quedado asi: 0 = [Julian] 1 = [Bety] 2 = [Marta]
// si queremos eliminar a "Betty" por su índice seria asi:
mi_lista.remove(1) // el 1 pertenece al índice o posicion de Betty en la lista
// la estructura de a lista ha quedado asi: 0 = [Julian] 1 = [Marta]
Marta ha pasado a la posición 1, ya que la lista forza a correr todos los elemenetos a al izquieda para que ocupe ese espacion eliminado, entonces el tamaño de la lista se reduce a 2 elementos únicamente
• La otra forma sería si le enviamos el objeto para que la lista lo identifique. Aclaro, ingresar un nuevo elemento con los mismos datos no significa que sea le mismo elemento, para que deba ser igual deber tener la misma instancia y/o la misma posición en memoria
Persona persona_1 = new Persona("Julian", 20);
Persona persona_2 = new Persona("Bety", 17);
Persona persona_3 = new Persona("Marta", 22);
ArrayList mi_lista = new ArrayList();
// agregamos unos cuantos elementos
mi_lista.add(persona_1);
mi_lista.add(persona_2);
mi_lista.add(persona_3);
// la estructura de a lista ha quedado asi: 0 = [Julian] 1 = [Bety] 2 = [Marta]
// si queremos eliminar a "Julian" debemos "enviarle a Juan" de nuevo
mi_lista.remove(persona_1) // se envia la instancia de Juan
// la estructura de a lista ha quedado asi: 0 = [bety] 1 = [Marta]
Otras funciones importantes
• Para determinar la cantidad de elementos de la lista solo se llama al metodo size()
int total = mi_lista.size();
• Para vaciar la lista y dejarla sin ningún elemento en ella se usa el método clear()
mi_lista.clear();
• Para saber si un objeto ésta insertado en lista usamos el método contains(…), el cual devuelve true si existe o un false si sucede lo contrario
boolean existencia = mi_lista.contains(elObjetoBuscado);
• Para saber si la lista esta vacía, es decir, si no tiene elementos usamos isEmpty() que devuelve true si NO hay elementos o un false si contiene algun elemnto.
boolean vacia = mi_lista.isEmpty();
• Para pasar o copiar los elementos a un arreglo de objetos (TipoObjeto objetos []) se usa el método toArray()
Object objetos [] = mi_lista.toArray();
IndexOf(Object o)
Esta función retorna la posición de un elemento que está en el array.
Persona a = new Persona ("Juan");
mi_lista.add(a);
Persona b = new Persona ("Marta");
mi_lista.add(b);
Persona c = new Persona ("Andrea");
mi_lista.add(c);
//retorna 2
int indice = mi_lista.indexOf(b);
addAll(Collection c)
Este método se encarga de anexar un arraylist a otra ya creado. Pero también se puede aplicar a otro tipo de listas que implementen la interfaz Collection.
ArrayList otra_lista = new ArrayList();
Persona d = new Persona ("Carlos");
otra_lista.add(d);
Persona e = new Persona ("Samuel");
otra_lista.add(e);
mi_lista.addAll( otra_lista );
Gracias por la informacion
Gracias por los ejemplos, siempre vienen muy bien
Tengo una duda..si yo tengo en un arraylist estos datos por ejemplo lista={pedro,46,60}, donde pedro es string y las notas son float o int.
Luego agrego lista a un arreglo de objetos, como esta indicado arriba:
Object objetos [] = lista.toArray();
Es posible acceder a los datos?
Por ejemplo,saber las notas de pedro, de maria etc..
algo asi objetos[0].nota1
Hola @pablo,
Podrias poner mas detalles?
- mas elememtos en el arrayList para ver que datos tienes en el
- el arreglo de objetos que tipo de de datos tiene?
pura vida
Hola..eso ya lo solucione,pero ahora me tngo otra duda.
tengo un arreglo de objetos de la clase Alumno (nombre,rut,nota..)
Alumnos []al=new Alumno();
al[1]=new Alumno(“pablo”,1675,44,32);// por ejemplo
luego agrego los al[i] a un arraylist
ArrayList lista=new Arraylist()
lista.add(al[i]);
Pude ordenar la lista por abecedario del nombre,pero mi problema es como buscar un elemento con binarysearch()
hago esto y me sale error Collections.binarySearch(lista,”pablo”); //tambien probe cambiando Collections por arraylist
Hola @pablo,
Intenta lo siguiente, en esa clase donde estas haciendo el binarySearch() declara el siguiente atributo:
Seguidamente creas una clase interna:
Ahora bien, luego de llamar a la linea lista.add(al[i]); agregas lo siguiente:
Ya me contaras como te fue. Pura vida
Fijate que yo tengo un problema en las sesiones, ya que Los Datos de la base de Datos los guardo En un Array List y despues lo pongo de atributos en la sesion, pero el problema es que tendria que mostrar solo un dato, y muestra todos los datos que han pasado por la sesion, ya intente invalidate() y request.getSession().setAtribute(“Sesion”,null);
Pero no funcionona
Hola,
Ya intentaste con session.removeAttribute(“Sesion”) ?
Recuerda que para que tu jsp pueda ivalidar la sesion debe ser refrescada.
Pura vida
Hola estuve probando la parte de verificar si el ArrayList esta vacio o no, comando isEmpty(). Creo que es lo contrario, false cuando tiene elementos y true cuando esta vacia.
boolean vacia = lista.isEmpty();
System.out.println(“Tiene algo?=” + vacia);
Gracias por tu Aporte, me ha servido.
hola tengo este metodo :
public ArrayList getEdificios() {
ArrayList lista = new ArrayList();
try {
PreparedStatement stm = con.prepareStatement(“SELECT * FROM ma “);
ResultSet rs = stm.executeQuery();
while (rs.next())
{
int id = rs.getInt(“codigo”);
String nombre = rs.getString(“nombre”);
String direccion = rs.getString(“direccion”);
int pisos= rs.getInt(“Pisos”);
int ascensores= rs.getInt(“ascensores”);
int matafuegos= rs.getInt(“matafuegos”);
int salaemergencia= rs.getInt(“salidas”);
int deptos= rs.getInt(“departamentos”);
String ultfumi= rs.getString(“ultimaFumigacion”);
String proxfumi = rs.getString(“proximaFumigacion”);
Edificio ed = new Edificio(id,nombre, direccion, pisos,ascensores, matafuegos,salaemergencia,deptos, ultfumi,proxfumi);
lista.add(ed);
}//end try
}
catch (SQLException e)
{
e.printStackTrace();
System.exit(1);
}//END CATCH
return lista;
}
Ese metodo esta ne una clase, No se como cargar un Jtable.
Gracias!
Tengo el citado metodo getEdificios(), en una clase en donde estan todas las sentencias del hsqld y quiero
desde mi jframe (mi vista), en el evento de una boton al hacer click, cargar una jtable, que se encuentra dentro de un jpanel. desde ya muchas gracias
Estoy intentando utilizar SQLOutput.writeArray pero lo estoy intentando cargar con un java.util.ArrayList o un java.util.List , es decir necesito guardar un java.util.Arraylist en un java.sql.Array
Excelente explicacion. Te felicito hombre.
Hola! no encuentro mi error, cuando se ejecuta el programa no puedo buscar un elemento con el método contains, siempre dice que no esta el objeto (aunque si este), intente buscar con indexOf, pero tambien sale -1… Creo que debe estar algo mal con la forma de agregar elementos al ArrayList ¿puedes ayudarme?
import java.util.Scanner;
import java.util.ArrayList;
public class Fechas
{
public static void main(String[] args)
{
int op; Scanner lee = new Scanner(System.in);
boolean enc;
Fecha tmp;
ArrayList F = new ArrayList();
do
{
System.out.println(“\t Fechas \n1.Agrega Fecha \n2.Imprimir”
+”Fechas \n3.Buscar Fecha \n4.Salir \n opcion:”);
op = lee.nextInt();
switch(op)
{
case 1:
tmp = new Fecha();
tmp.setFecha(); //Método para poner datos al objeto
System.out.println(“Ingresa: ” + tmp.toString());
F.add(tmp);
break;
case 2:
for(int i=0; i<F.size(); i++)
{
tmp = F.get(i);
tmp.getFecha(); //Metodo para imprimir al objeto
}
break;
case 3:
Fecha tmp2 = new Fecha();
tmp2.setFecha();
tmp2.getFecha();
enc = F.contains(tmp2);
System.out.println(enc);
break;
case 4:
break;
default:
System.out.println("NO VALIDO");
}//sw
}while(op!=4);
}//main
}//clase
————– LA CLASE FECHA ———–
import java.util.Scanner;
public class Fecha
{
public Fecha()
{
dia = 1;
mes = 1;
anio = 2011;
lee = new Scanner(System.in);
}
public void setFecha()
{
System.out.println("ingresa dia-mes-año");
dia= lee.nextInt();
mes= lee.nextInt();
anio= lee.nextInt();
}
public void getFecha()
{
System.out.println("Fecha : " + dia + " " + mes + " " + anio );
}
public String toString()
{
String x = dia + "/" + mes + "/" + anio;
return x;
}
Scanner lee;
int dia,mes,anio;
}
Hola, ya encontre la solución.
GRACIAS!
hola por favor puedes publicar tu solucion..
yo tbm tengo un problema similar
y recuerda qqqqqqqqq
sts es un sitio para compartir conocimientos
gracias d antemano..
Hola quisiera que me explicaran, como imprimir un arraylist…gracias
buena informacion gracias por aporte
cuidense
// alguien me ayude este es my examen y no lo e terminado es una lista de empleado con nomres horas trabajadas y pago por hora y lo que me falta es una condicion que me diga cual empleado es que menos cobra
import java.util.Scanner;
import java.util.ArrayList;
import java.util.*;
public class Programa{
public ArrayList listaEmpleados = new ArrayList();
public static void main(String[] args){
Programa p = new Programa();
p.mostrarMenu();
}
public void mostrarMenu(){
System.out.println(“******* Francis H. Mota Valera *******”);
System.out.println(“******** Matricula # 86766 ********\n”);
System.out.println(“************* Menu de seleccion *************\n\n\n”);
System.out.println(“1) Agregar Empleado”);
System.out.println(“2) Consultar Empleado”);
System.out.println(“3) Listar todos los Empleados”);
System.out.println(“4) Mostrar ultimo Empleado”);
//estas son las tres opciones mas
System.out.println(“5) Impresion de nomina de todos los empleados: “);
System.out.println(“6) Impresion de Empleado que menos salario * gana *: “);
System.out.println(“7) Impresion de Empleado que mas salario * gana *: “);
// estas la puse de ultimo por que se veria feo en el medio de las otras
System.out.println(“8) Salir\n\n\n”);
System.out.print( “Digite aqui el numero de su opcion: “);
Scanner l = new Scanner(System.in);
int numeroOpcion = l.nextInt();
switch(numeroOpcion){
case 1:
double horasTrabajadas = 0;
int id = 0;
int pagoPorHora = 0;
String nombre = “”;
String puesto = “”;
String fechaIngreso = “”;
System.out.print(“Digite Fecha De Ingreso “);
fechaIngreso = l.next();
//System.out.println(” Hoy ” + new Date() );
System.out.print(“Digite aqui el ID del nuevo empleado: “);
id = l.nextInt();
System.out.print(“Digite el nombre: “);
nombre = l.next();
System.out.print(“Digite el puesto: “);
puesto = l.next();
//esto es los atributos nuevos nuevo
System.out.print(“Digite aqui hora a trabajar “);
horasTrabajadas = l.nextInt();
System.out.print(“Digite aqui Pago Por hora “);
pagoPorHora = l.nextInt();
Empleado p = new Empleado(id,pagoPorHora,horasTrabajadas, nombre,puesto,fechaIngreso);
listaEmpleados.add(p);
System.out.println(“Empleado agregado con exito!\n\n\n”);
break;
case 2:
int Total = 0;
int id2 =0;
System.out.print(“Digite aqui el ID a consultar: “);
id2 = l.nextInt();
for(Empleado emp : listaEmpleados){
if(id2== emp.id){
System.out.println(“\n El empleado buscado es: ” + emp.nombre + ” trabaja en ” + emp.puesto +
” y su suerdo sera:” + emp.pagoPorHora*emp.horasTrabajadas + “\n Fecha Inicial “+ new Date() + “\n” );
}
else{
System.out.println(” \n******El ID buscado no Existe*****”);
}
}
break;
case 3:
for(Empleado emp : listaEmpleados){
System.out.println(“\n Empleado # ” + emp.id + “\t Nombre: ” + emp.nombre + ” \t Puesto: ” + emp.puesto+ “\n”);
}
break;
case 4:
int cantidadEmpleados = listaEmpleados.size();
Empleado emp = listaEmpleados.get(cantidadEmpleados-1);
System.out.println(“\n El ultimo empleado es : ” + emp.nombre + ” trabaja en ” + emp.puesto+”\n”);
break;
// esta es una de las nuevas ocpciones
case 5:
for(Empleado emp1 : listaEmpleados){
System.out.println(“\n Empleado ” + “\t Nombre: ” + emp1.nombre + ” \t Puesto: ” +
emp1.puesto + “\t”+ ” Salario : ” + emp1.horasTrabajadas*emp1.pagoPorHora+”\n”);
}
break;
case 6:
/*int total = listaEmpleados.size();
Empleado emp2 = listaEmpleados.get(total+1);
System.out.println(“\n El ultimo empleado es : ” + emp2.nombre + ” trabaja en ” + emp2.puesto+”\n”);
for(Empleado emp2 : listaEmpleados){
System.out.println(emp2.nombre+” : es el empleado que mas salario Gana ” + emp2.horasTrabajadas*emp2.pagoPorHora);
}
*/
break;
case 7:
break;
//ahora la optcion 8 es la de salir
case 8:
System.exit(0);
break;
default:
System.out.println(” \n****** Opcion No Valida ********\n”);
break;
}
mostrarMenu();
}
}
class Empleado{
public String fechaIngreso;
public int id;
public String nombre;
public String puesto;
public double horasTrabajadas;
public int pagoPorHora;
public Empleado(int id,int pagoPorHora,double horasTrabajadas,String nombre, String puesto,String fechaIngreso){
this.id = id;
this.nombre = nombre;
this.puesto = puesto;
this.horasTrabajadas = horasTrabajadas;
this.pagoPorHora = pagoPorHora;
this.fechaIngreso=fechaIngreso;
//estos son los dos nuevos atributos
}
}
Gracias por las informaciones bridadas son de mucha ayuda
La mayoria de post creo que ya estan resueltos, siento mucho haberme tardado, pero ya ando aca
Enseñeme como usar arraylist con clases x fa
Concretamente qué quieres? Dime cual es tu duda, porque creo que el ejemplo de arriba de puede servir.
Que tal, he buscado y buscado en la red sobre ArrayList para resolver un problema, pero ninguno me da la informacion que busco, la cosa es así….todos usan arreglos que llenan de forma predeterminada desde el código…..como le hago para que el que lo llene sea el usuario del programa atravez del teclado….necesito crear un objeto sonde seguarden estos datos primero?….si es asi….despues como se los agrego a cada posisión del array?…..estoy algo confundido….de antemano gracias.
saludos
Tienes varias formas, una de ellas es hacer un formulario que tenga JTextField (campo de texto donde el usuario digita con el teclado), y atrapas el texto asi:
luego lo guardas directamente si quieres:
o bien, asignas el texto a un objeto:
y luego lo guadaras en el arraylist:
Muchas gracias por tu respuesta…..intentare el segundo metodo para ver los resultados, el primero no lo puedo usar ya que lo estoy haciendo para modo consola…(soy novato)…aún no llego a la parte de windows forms…si tengo algun problema en implementarlo…te molestare nuevamente….gracias y Saludos
P.D. en que lugar del mundo estas?, ya que tu respuesta aparece como si fuera el día de mañana…es decir aca es 15 de marzo y tu respuesta aparece como 16 de marzo….Gracias
Claro, no dude en preguntar que por lo general ando pendiente y aunque me tarde de un día para otro pues siempre ando acá.
En cuanto al lugar me encuentro en Costa Rica, realmente no me había percatado de la hora, pero ya la actualicé, gracias a vos
Hola yo hice un post para solucionar un problema con jtable y arrayalist lo cual aun no lo he solucionado pero si alguien tiene alguna idea seria genial que me ayude gracias de antemano aca les dejo el link del post
http://www.forosdelweb.com/f45/problema-con-jtable-arraylist-982786/
hola,
ya te respondí.
Buenas, tengo una duda sobre como agregar objetos ya creados a una nueva clase. Mi caso es que creo objetos de la clase Nota y los quiero agregar a la clase Libreta. Este es el codigo que utilizo pero no me compila. Trato de agregar los objetos a traves de uno de sus campos (titulo), pero no consigo hacerlo bien, a ver si alguien me puede ayudar.
public void agregarNota(String titulo)
{
Nota n = new Nota();
for(int f=0; f<numeroNotas(); f++) {
if(numeroNotas() == 0) {
this.libretaNotas.add(titulo);
}
else {
n = libretaNotas.get(f);
if(n.getTitulo() != titulo) {
this.libretaNotas.add(titulo);
}
}
}
}
Gracias y un saludo.
Hola timi,
¿qué error te lanza? así a como está tu código no parece nada malo.
Hola manix,
el error es el siguiente:
cannot find symbol-method add(java.lang.String)
en la linea donde pone:
this.libretaNotas.add(titulo);
Gracias y un saludo.
Buenas, la anterior duda la he solucionado cambiando todo el metodo, pero ahora me ha surgido otra duda.
Estoy implementando un metodo lanzador, para poder ejecutarlo fuera del entorno de programacion, y me he atascado en lo siguiente:
Nota n = new Nota();
Nota t = new Nota();
for(int f=0; f<lib2.numeroNotas(); f++) {
t.setFecha(21, 4, 2012);
n = Libreta lib2.libretaNotas.get(f);
if(n.getFecha == t.getFecha) {
n.printTitulo();
}
}
lo que trato de hacer con esto es que me imprima el titulo de una nota que tenga la misma fecha que le he dado a la nota t.
El problema es que no me compila, se me para en la linea donde pongo n = Libreta lib2.libretaNotas.get(f); la cual deberia ir llamando a todas las notas que tengo en lib2, pero algo pongo mal porque no me compila, a ver si alguien me pueda ayudar, muchas gracias y un saludo.
intenta: n =(Libreta) …
Hola manix, he puesto Libreta entre parentesis y me da el siguiente error:
libretaNotas has private access in Libreta
libretaNotas lo tienes como privado. Solo te falta hacer el método get respectivo:
POr ejemplo:
public ArrayList getLibretaNotas(){
return this.libretaNotas;
}
y luego lo llamas asi donde te lanza el error:
n = (Libreta) lib2.getLibretaNotas().get(f);
indexOf(Object o)
addAll(Collection c)
un ejemplito de estos dos xD
digo si se puede D:
Hola @steephen, el post ya esta actualizado y puedes ver al final de él los dos métodos que mencionas! saludos