metodos - imprimir arraylist java
TamaƱo inicial para el ArrayList (13)
10 es la capacidad inicial de AL, no el tamaño (que es 0). Debe mencionar la capacidad inicial a un valor alto cuando va a tener muchos elementos, ya que evita la sobrecarga de expandir la capacidad a medida que continúa agregando elementos.
Puede establecer el tamaño inicial para un ArrayList haciendo
ArrayList<Integer> arr=new ArrayList<Integer>(10);
Sin embargo, no puedes hacer
arr.add(5, 10);
porque causa una excepción fuera de límites.
¿De qué sirve configurar un tamaño inicial si no puede acceder al espacio que asignó?
La función de agregar se define como add(int index, Object element)
por lo que no estoy agregando al índice 10.
ArrayList myList = new ArrayList (10);
// myList.add(3, "DDD");
// myList.add(9, "III");
myList.add(0, "AAA");
myList.add(1, "BBB");
for(String item:myList){
System.out.println("inside list : "+item);
}
/ * Declara que el carácter inicial del arrailista no es más que ahorrar tiempo de cambio interno; cuando agregamos el elemento internamente, verifica la capacidad para aumentar la capacidad, puede agregar el elemento en el índice 0 inicialmente y luego en 1. * /
Aunque su arraylist tiene una capacidad de 10, la lista real no tiene elementos aquí. El método add se utiliza para insertar un elemento en la lista real. Como no tiene elementos, no puede insertar un elemento en el índice de 5.
Confunde el tamaño de la lista de arreglos con su capacidad:
- el tamaño es el número de elementos en la lista;
- la capacidad es la cantidad de elementos que la lista puede acomodar sin reasignar sus estructuras internas.
Cuando llama a la new ArrayList<Integer>(10)
, está configurando la capacidad inicial de la lista, no su tamaño. En otras palabras, cuando se construye de esta manera, la lista de matrices comienza su vida en blanco.
Una forma de agregar diez elementos a la lista de matrices es mediante un bucle:
for (int i = 0; i < 10; i++) {
arr.add(0);
}
Una vez hecho esto, ahora puede modificar los elementos en los índices 0..9.
En este momento no hay elementos en su lista, por lo que no puede agregar al índice 5 de la lista cuando no existe. Confunde la capacidad de la lista con su tamaño actual.
Solo llama:
arr.add(10)
para agregar el entero a su ArrayList
Esto podría ayudar a alguien ...
ArrayList<Integer> integerArrayList = new ArrayList<>(Arrays.asList(new Integer[10]));
Me enfrenté a un problema similar, y solo sabiendo que arrayList es una implementación de matriz de tamaño variable de la interfaz de la Lista, también espero que pueda agregar elementos a cualquier punto, pero al menos tenga la opción de definir el tamaño inicial. De todos modos, primero puede crear una matriz y convertirla a una lista como:
int index = 5;
int size = 10;
Integer[] array = new Integer[size];
array[index] = value;
...
List<Integer> list = Arrays.asList(array);
o
List<Integer> list = Arrays.asList(new Integer[size]);
list.set(index, value);
Si desea agregar 10 elementos a su ArrayList
, puede intentarlo:
for (int i = 0; i < 10; i++)
arr.add(i);
Si ya ha declarado una variable de tamaño de matriz, usaría el size
variable en lugar del número ''10''
Si desea agregar los elementos con índice, podría utilizar una matriz.
String [] test = new String[length];
test[0] = "add";
Si desea una lista con un tamaño predefinido, también puede utilizar:
List<Integer> arr = Arrays.asList(new Integer[10]);
Supongo que una respuesta exacta a su pregunta sería:
Establecer un tamaño inicial en un ArrayList reduce el nr. de veces la reasignación de memoria interna tiene que ocurrir. La lista está respaldada por una matriz. Si especifica, por ejemplo, la capacidad inicial 0, ya en la primera inserción de un elemento, la matriz interna tendría que redimensionarse. Si tiene una idea aproximada de cuántos elementos retendría su lista, establecer la capacidad inicial reduciría el nr. de las reasignaciones de memoria que ocurren mientras utiliza la lista.
si quieres usar Collections.fill (list, obj); para completar la lista con un objeto repetido, alternativamente, puede usar
ArrayList<Integer> arr=new ArrayList<Integer>(Collections.nCopies(10, 0));
La línea copia 10 veces 0 en tu ArrayList.
La capacidad de un ArrayList
no es la misma que su tamaño . El tamaño es igual al número de elementos contenidos en el ArrayList
(y en cualquier otra implementación de la List
).
La capacidad es solo la longitud de la matriz subyacente que se utiliza para almacenar internamente los elementos de ArrayList
, y siempre es mayor o igual que el tamaño de la lista.
Al llamar a set(index, element)
en la lista, el index
relaciona con el número real de los elementos de la lista (= tamaño) (que es cero en su código, por lo tanto, se lanza el AIOOBE
), no a la longitud del arreglo (= capacidad). ) (que es un detalle de implementación específico de ArrayList
).
El método set
es común a todas las implementaciones de List
, como LinkedList
, que en realidad no es implementado por una matriz, sino como una cadena de entradas vinculadas.
Edición : en realidad usas el método de add(index, element)
, no set(index, element)
, pero el principio es el mismo aquí.