Imagina que tu arreglo tiene una capacidad inicial de 3 posiciones 🧠 y que el contador comienza en 0.
Insertamos el número 10. El contador aumenta a 1.
🟩 → posición ocupada ⬜ → posición libre
Agregamos 20 y 30.
Ahora el arreglo está lleno 😬
Intentamos insertar 50
El arreglo está lleno, así que se duplica la capacidad 💡
Ahora sí, se agrega el nuevo elemento y el contador sube a 4.
Nuestro arreglo puede seguir creciendo automáticamente.
Cada vez que se llena, duplica su tamaño 🚀
public class Arreglo {
private int[] items;
// Nuevo campo: número de elementos realmente insertados
private int contador;
public Arreglo(int longitud){
items = new int[longitud];
contador = 0; // al inicio, el arreglo está vacío
}
public void imprimir() {
for (int i = 0; i < contador; i++)
System.out.println(items[i]);
}
}insertarBien, ahora implementemos el método insertar.
Este método debe añadir un nuevo elemento al final del arreglo actual, y si el arreglo está lleno, redimensionarlo.
Para insertar un nuevo elemento, necesitamos un índice válido.
Ese índice es contador, porque apunta a la primera posición libre del arreglo.
Desde la clase principal, podemos probarlo con unos valores sencillos:
10
20
public void insertar(int item) {
if (items.length == contador) {
// 1️⃣ Crear un nuevo arreglo del doble de tamaño
int[] newItems = new int[contador * 2];
// 2️⃣ Copiar los elementos antiguos al nuevo
for (int i = 0; i < contador; i++)
newItems[i] = items[i];
// 3️⃣ Reemplazar la referencia
items = newItems;
}
// 4️⃣ Insertar el nuevo elemento
items[contador++] = item;
}Probemos nuevamente con más elementos:
10
20
30
50
public class Arreglo {
private int[] items;
// Nuevo campo: número de elementos realmente insertados
private int contador;
public Arreglo(int longitud){
items = new int[longitud];
contador = 0; // al inicio, el arreglo está vacío
}
public void insertar(int item) {
// Si el array está lleno, debemos redimensionarlo
if (items.length == contador) {
int[] newItems = new int[contador * 2];
for (int i = 0; i < contador; i++)
newItems[i] = items[i];
items = newItems;
}
// agregar este nuevo elemento al final del array actual.
items[contador++] = item;
}
public void imprimir() {
for (int i = 0; i < contador; i++)
System.out.println(items[i]);
}
}Ahora nuestro arreglo se comporta como un array dinámico 💡 Crece automáticamente cuando es necesario, exactamente como lo hacen internamente las clases ArrayList en Java.
“Los buenos comentarios explican por qué algo se hace, no qué hace el código.”