"Aquí estoy."

"¡Hola, Ellie!"

"Hoy hablaremos de un tema interesante. Les voy a hablar de la clase ArrayList ".

"¿Una nueva clase? ¡Genial! ¿Qué puede hacer?"

"Permítanme comenzar con la historia de fondo. Lo único que a los programadores no les gusta de los arreglos es que no se puede cambiar su tamaño. ¿ Qué hace si necesita agregar tres elementos más a un arreglo que solo tiene un espacio libre? "

"La única solución a este problema es crear arreglos muy grandes, para garantizar que tenga suficiente espacio para todos los elementos. Sin embargo, esto a menudo significa memoria desperdiciada. Si un arreglo generalmente contiene tres elementos, pero existe la más mínima posibilidad que podría necesitar acomodar 100 elementos, debe crear una matriz de 100 elementos".

"Entonces, ¿qué se les ocurrió a los programadores?"

"Escribieron la clase ArrayList , que hace lo mismo que un Array, pero puede cambiar su tamaño".

"Movimiento interesante. ¿Cómo hicieron eso?"

"Cada objeto ArrayList almacena una matriz regular de elementos. Cuando lee elementos de una ArrayList , los lee desde su matriz interna. Cuando los escribe en ArrayList , los escribe en su matriz interna. Aquí, compare estas columnas:"

Formación Lista de arreglo
Crear un contenedor para elementos.
String[] list = new String[10];
ArrayList<String> list = new ArrayList<String>();
Obtener el número de elementos
int n = list.length;
int n = list.size();
Obtener un elemento de una matriz/colección
String s = list[3];
String s = list.get(3);
Escribir un elemento en una matriz
list[3] = s;
list.set(3, s);

"Entonces, ¿por qué ArrayList es mejor? Por lo que sé, el código ahora es más largo".

"Primero, ArrayList admite varias operaciones adicionales que los programadores tienen que realizar todo el tiempo. Una matriz común no admite estas operaciones. Por ejemplo, insertar o eliminar elementos del medio de una matriz sin dejar agujeros " .

"En segundo lugar, la capacidad de cambiar el tamaño de la matriz. Cuando necesita agregar un elemento más pero la matriz interna no tiene ranuras libres, esto es lo que sucede dentro de ArrayList :

a) Se crea otra matriz que es un 50 % más grande que la matriz interna actual, más un elemento.

b) Todos los elementos de la matriz anterior se copian en la nueva.

c) La nueva matriz se guarda como la matriz interna del objeto ArrayList. La matriz anterior se declara basura (simplemente dejamos de almacenar una referencia a ella)".

Formación Lista de arreglo
Agregar un elemento al final de la matriz
esta accion no es soportada
list.add(s);
Agregue un elemento en el medio de la matriz
esta accion no es soportada
list.add(15, s);
Agregar un elemento al comienzo de la matriz
esta accion no es soportada
list.add(0, s);
Eliminar un elemento de la matriz
Podríamos eliminar un elemento con list[3] = null. Pero esto dejaría un 'agujero' en la matriz.
list.remove(3);

"¿Cómo trabajamos con este ArrayList?"

"En realidad, tal como lo hacemos con una matriz ordinaria. Mira. Comparemos trabajar con una ArrayList con trabajar con una matriz. Supongamos que necesitamos 'leer 10 cadenas y mostrarlas en la pantalla en orden inverso '".

"Mira este:

con una matriz
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
String[] list = new String[10];
for (int i = 0; i < list.length; i++)
{
  String s = reader.readLine();
  list[i] = s;
}

// Display the contents of the array
for (int i = 0; i < list.length; i++)
{
  int j = list.length - i - 1;
  System.out.println( list[j] );
}
}
Con una ArrayList
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
ArrayList&ltString> list = new ArrayList&ltString>();
for (int i = 0; i < 10; i++)
{
  String s = reader.readLine();
  list.add(s);
}

// Display the contents of the collection
for (int i = 0; i < list.size(); i++)
{
  int j = list.size() - i - 1;
  System.out.println( list.get(j) );
}
}

He usado el mismo color para resaltar acciones similares en cada columna".

"Por un lado, todo es diferente. Por el otro, sigue siendo lo mismo".

"Correcto. Excepto que no usamos corchetes cuando trabajamos con una ArrayList . En su lugar, usamos los métodos get , set y add ".

"Sí, lo reuní. Aún así, se ve muy parecido".