Semestre 02, 2026
Hasta ahora podemos hacer:
String[] nombres = new String[3];
System.out.println(nombres.length);
3
Supongamos que desarrollamos un sistema para registrar perros.
Perro[] perros = new Perro[100];
Con un arreglo tradicional debemos decidir el tamaño de antemano. Quizá necesitemos más espacio del previsto, o desperdiciemos memoria reservando de más.
Un arreglo dinámico puede cambiar su cantidad de elementos durante la ejecución del programa. En Java utilizamos la clase ArrayList.
[ ].[ Max ][ Max ] [ Luna ][ Max ] [ Luna ] [ Rocky ]java.util.import java.util.ArrayList;ArrayList<String> nombres = new ArrayList<>();[ ]nombres.size() devuelve 0.
ArrayList<String> nombres = new ArrayList<>();
ArrayList<Integer> edades = new ArrayList<>();
ArrayList<Double> notas = new ArrayList<>();
ArrayList<Perro> perros = new ArrayList<>();
Con tipos primitivos usamos sus Wrapper Classes.
| Primitivo | Wrapper |
|---|---|
int | Integer |
double | Double |
boolean | Boolean |
char | Character |
ArrayList<String> nombres = new ArrayList<>();
nombres.add("Ana");
nombres.add("Luis");
nombres.add("Carlos");
System.out.println(nombres.size());
| Arreglo tradicional | ArrayList |
|---|---|
nombres[0] | nombres.get(0) |
System.out.println(nombres.get(1));
arrayList.set(indice, nuevoValor);
nombres.set(1, "Pedro");
set reemplaza el valor de una posición existente; no agrega elementos nuevos ni cambia el tamaño de la lista.
Partimos de la lista [ Ana ] [ Pedro ] [ Carlos ].
nombres.remove(1);nombres.remove("Carlos");| Método | Función |
|---|---|
add() | Agregar un elemento a la lista |
get() | Obtener el elemento de una posición |
set() | Modificar el elemento de una posición |
remove() | Eliminar por índice o por contenido |
size() | Cantidad de elementos almacenados |
contains() | Verificar si un elemento existe |
isEmpty() | Verificar si la lista está vacía |
clear() | Eliminar todos los elementos |
boolean existe = nombres.contains("Ana"); // true
Ciclo for tradicional
for (int i = 0; i < nombres.size(); i++) {
System.out.println(nombres.get(i));
}
Ciclo for-each
for (String nombre : nombres) {
System.out.println(nombre);
}
El arreglo usa .length, sin paréntesis, porque es un atributo. El ArrayList usa .size(), con paréntesis, porque es un método.
Conectando los arreglos dinámicos con la Programación Orientada a Objetos.
ArrayList<Perro> perros = new ArrayList<>();
Perro perro1 = new Perro("Max", 3);
Perro perro2 = new Perro("Luna", 2);
perros.add(perro1);
perros.add(perro2);
// Agregar un objeto anónimo directamente:
perros.add(new Perro("Rocky", 5));
for (Perro perro : perros) {
perro.mostrarInformacion();
}
Perro perro = perros.get(0);
// Max
System.out.println(perro.getNombre());
String buscar = "Luna";
for (Perro perro : perros) {
if (perro.getNombre().equalsIgnoreCase(buscar)) {
System.out.println("Encontrado");
perro.mostrarInformacion();
}
}
String buscar = "Luna";
for (Perro perro : perros) {
if (perro.getNombre().equalsIgnoreCase(buscar)) {
System.out.println("Encontrado");
perro.mostrarInformacion();
}
}
Guardamos en una variable el nombre que queremos encontrar. Así el criterio de búsqueda queda en un solo lugar y es fácil de cambiar.
String buscar = "Luna";
for (Perro perro : perros) {
if (perro.getNombre().equalsIgnoreCase(buscar)) {
System.out.println("Encontrado");
perro.mostrarInformacion();
}
}
El ciclo for-each recorre la lista completa y en cada vuelta la variable perro apunta a uno de los objetos almacenados.
String buscar = "Luna";
for (Perro perro : perros) {
if (perro.getNombre().equalsIgnoreCase(buscar)) {
System.out.println("Encontrado");
perro.mostrarInformacion();
}
}
Pedimos el nombre al objeto con su getter y lo comparamos con el criterio. equalsIgnoreCase ignora mayúsculas y minúsculas, así que luna y Luna coinciden.
String buscar = "Luna";
for (Perro perro : perros) {
if (perro.getNombre().equalsIgnoreCase(buscar)) {
System.out.println("Encontrado");
perro.mostrarInformacion();
}
}
Cuando hay coincidencia avisamos al usuario y pedimos al propio objeto que muestre sus datos. Aquí combinamos ArrayList, objetos con getters, comparación de String y el ciclo for-each.
new Perro[5]; con tamaño fijo.new ArrayList<>(); puede crecer y reducirse.