Parece que arraylist
no está haciendo su trabajo para presize:
// presizing
ArrayList<Integer> list = new ArrayList<Integer>(60);
Luego, cuando intento acceder a él:
list.get(5)
En lugar de devolver 0, arroja IndexOutOfBoundsException: Índice 5 fuera de límites para la longitud 0 .
¿Hay alguna manera de inicializar todos los elementos a 0 de un tamaño exacto como lo que hace C ++?
java
collections
escarcha
fuente
fuente
Respuestas:
El número entero pasado al constructor representa su capacidad inicial , es decir, el número de elementos que puede contener antes de que necesite cambiar el tamaño de su matriz interna (y no tiene nada que ver con el número inicial de elementos en la lista).
Para inicializar una lista con 60 ceros, debe hacer:
Si desea crear una lista con 60 objetos diferentes , puede usar Stream API con
Supplier
lo siguiente:fuente
ArrayList
, y simplemente programarloList
. Esa es una decisión que le queda al OP, por supuesto.nCopies
es inmutable, por lo que crear una nuevaArrayList
es probablemente una buena idea.nCopies
con un objeto complejo, la colección no se instancia con 60 objetos diferentes, sino 60 veces con el mismo objeto. Así que solo usa esto para las primitivas.nCopies
es útil con tipos de referencia: objetos inmutables como cadenas, patrones de objetos nulos, constantes de enumeración, ... De todos modos, actualicé la respuesta con una solución para crear 60 objetos diferentes.fuente
IndexOutOfBoundsException
conList<Integer> list = new ArrayList<Integer>(60); Collections.fill(list, new Integer(0)); list.get(5);
Arrays.asList
produce unList
que no permite agregar o quitar, por lo que no es lo mismo que lo que quiere el OP. Funcionaría si todo lo que necesita hacer esset
, pero podría ser mejor que solo use una matriz en ese caso.Los 60 que está pasando son solo la capacidad inicial de almacenamiento interno. Es una pista de lo grande que crees que podría ser, pero, por supuesto, no está limitado por eso. Si necesita preestablecer valores, deberá establecerlos usted mismo, por ejemplo:
fuente
Implementación de Java 8 (Lista inicializada con
60
ceros) :new int[N]
- crea una matriz llena de ceros y longitud Nboxed()
- cada elemento encuadrado en un enterocollect(Collectors.toList())
- recoge elementos de secuenciafuente
No es así. ArrayList solo usa array como respeto interno. Si agrega más de 60 elementos, la matriz subyacente se ampliará. Sin embargo, puede agregar tantos elementos a esta matriz como la RAM que tiene.
fuente