Guía de programación en Java > ListaArray
En esta sesión aprenderás a programar tu propia clase ListaArray
, una versión simplificada de la clase ArrayList
de Java. Este ejercicio no solo te ayudará a entender cómo funcionan los arrays de una dimensión, sino que también te permitirá practicar conceptos clave como encapsulación, métodos y gestión dinámica de datos.
¿Por qué no usar solo Arrays?
Aunque los arrays son una estructura básica y muy útil en Java, presentan varias limitaciones que pueden dificultar su uso en proyectos más complejos:
Limitaciones de los Arrays:
- Tamaño Fijo:
- Cuando declaras un array, debes especificar su tamaño, y este no puede cambiar durante la ejecución del programa.
- Esto es problemático si no sabes cuántos elementos necesitarás almacenar.
int[] numeros = new int[5]; numeros[5] = 10; // Error: Índice fuera de rango
- Gestión Manual de Espacio:
- Si el array se llena, debes crear uno nuevo con más espacio y copiar los elementos existentes manualmente.
- Falta de Métodos Incorporados:
- Los arrays no tienen métodos útiles como agregar, eliminar o buscar elementos. Todo esto debe programarse manualmente.
- No Verifican Tamaño Automáticamente:
- Si intentas acceder a un índice fuera de los límites del array, obtendrás un error de tiempo de ejecución.
System.out.println(numeros[10]); // Error: ArrayIndexOutOfBoundsException
Por estas razones, Java ofrece la clase ArrayList
, que es más flexible y fácil de usar. Sin embargo, hoy vamos a crear nuestra propia versión básica: MiArrayLista
.
¿Qué Vamos a Construir? La Clase ListaArray
Array
Objetivos:
- Crear una clase
ArrayLista
que use un array interno para almacenar elementos. - Implementar métodos básicos:
add(elemento)
: Agregar un elemento al final.get(indice)
: Obtener un elemento por su índice.size()
: Obtener el número de elementos almacenados.remove(indice)
: Eliminar un elemento por su índice.
- Manejar el crecimiento dinámico del array.
1: Declarar la Clase y Atributos
Necesitamos un array interno para almacenar los datos y un contador para rastrear cuántos elementos hay.
Código:
public class ListaArray {
private int[] elementos; // Array interno
private int size; // Número de elementos actuales
// Constructor por defecto
public ListaArray() {
elementos = new int[10]; // Capacidad inicial
size = 0; // Ten en cuenta que ahora mismo no hay nada en la lista
}
}
2: Método add
Este método agrega un elemento al final del array. Si el array está lleno, debemos crear uno nuevo con más capacidad.
Código:
public void add(int elemento) {
if (size == elementos.length) {
expandirCapacidad(); // Crear un array más grande si es necesario
}
elementos[size] = elemento; // Agregar el elemento
size++;
}
// Método privado para expandir la capacidad del array
private void expandirCapacidad() {
int[] nuevoArray = new int[elementos.length * 2]; // Duplicar tamaño
for (int i = 0; i < elementos.length; i++) {
nuevoArray[i] = elementos[i];
}
elementos = nuevoArray; // Reemplazar el array antiguo
}
3: Método get
Devuelve el elemento en un índice específico. Si el índice está fuera de rango, lanzamos una excepción.
Código:
public int get(int indice) {
if (indice < 0 || indice >= size) {
throw new IndexOutOfBoundsException("Índice fuera de rango");
}
return elementos[indice];
}
4: Método size
Devuelve el número de elementos almacenados.
Código:
public int size() {
return size;
}
5: Método remove
Elimina un elemento en un índice específico y ajusta los elementos restantes.
Código:
public void remove(int indice) {
if (indice < 0 || indice >= size) {
throw new IndexOutOfBoundsException("Índice fuera de rango");
}
for (int i = indice; i < size - 1; i++) {
elementos[i] = elementos[i + 1];
}
size--; // Reducir el tamaño
}
Clase Completa: ListaArray
Aquí tienes la implementación completa:
public class ListaArray {
private int[] elementos;
private int size;
public ListaArray() {
elementos = new int[10];
size = 0;
}
public void add(int elemento) {
if (size == elementos.length) {
expandirCapacidad();
}
elementos[size] = elemento;
size++;
}
private void expandirCapacidad() {
int[] nuevoArray = new int[elementos.length * 2];
for (int i = 0; i < elementos.length; i++) {
nuevoArray[i] = elementos[i];
}
elementos = nuevoArray;
}
public int get(int indice) {
if (indice < 0 || indice >= size) {
throw new IndexOutOfBoundsException("Índice fuera de rango");
}
return elementos[indice];
}
public int size() {
return size;
}
public void remove(int indice) {
if (indice < 0 || indice >= size) {
throw new IndexOutOfBoundsException("Índice fuera de rango");
}
for (int i = indice; i < size - 1; i++) {
elementos[i] = elementos[i + 1];
}
size--;
}
}
Ejemplo de Uso en la Clase Main
Código:
public class Main {
public static void main(String[] args) {
ListaArray lista = new ListaArray();
lista.add(10);
lista.add(20);
lista.add(30);
System.out.println("Elemento en el índice 1: " + lista.get(1));
System.out.println("Tamaño: " + lista.size());
lista.remove(1);
System.out.println("Tamaño después de eliminar: " + lista.size());
}
}
Salida:
Elemento en el índice 1: 20
Tamaño: 3
Tamaño después de eliminar: 2
Conclusión
Crear tu propia versión básica de ArrayList
es una excelente forma de comprender cómo funcionan las estructuras dinámicas en Java. Has aprendido a superar las limitaciones de los arrays implementando:
- Crecimiento dinámico.
- Métodos para agregar, obtener y eliminar elementos.
Este conocimiento te será útil para entender estructuras de datos más avanzadas y apreciar las ventajas de usar clases como ArrayList
en tus proyectos. ¡Ahora es tu turno de practicar y experimentar con mejoras en tu clase Lista
Array! 🚀
Deja una respuesta