Creo que es una pregunta bastante simple, pero no puedo entender cómo hacer esto correctamente.
Tengo una lista de matrices vacía:
ArrayList<object> list = new ArrayList<object>();
Tengo algunos objetos que quiero agregar y cada objeto tiene que estar en una posición determinada. Sin embargo, es necesario que se puedan agregar en cada orden posible. Cuando intento esto, no funciona y obtengo un IndexOutOfBoundsException
:
list.add(1, object1)
list.add(3, object3)
list.add(2, object2)
Lo que he intentado es rellenar ArrayList
con null
y luego hacer lo anterior. Funciona, pero creo que es una solución horrible. Hay otra manera de hacer esto?
Respuestas:
Puedes hacerlo así:
Después de agregar object2 a la posición 2, moverá object3 a la posición 3.
Si desea que object3 esté en position3 todo el tiempo, le sugiero que use un HashMap con position como clave y object como valor.
fuente
Puede usar una matriz de objetos y convertirla a ArrayList-
ArrayList será- [1, nulo, 2, 3, nulo, nulo, nulo, 7, nulo, nulo]
fuente
Si ese es el caso, ¿por qué no considera usar una matriz regular? Inicialice la capacidad y coloque los objetos en el índice que desee.
fuente
También puede anular ArrayList para insertar valores nulos entre su tamaño y el elemento que desea agregar.
Luego puede agregar en cualquier punto de la ArrayList. Por ejemplo, este método principal:
produce este resultado de la consola:
0: cero
1 uno
2: dos
3: nulo
4: nulo
5: cinco
fuente
Le llamo la atención sobre la
ArrayList.add
documentación , que dice que arrojaIndexOutOfBoundsException
, si el índice está fuera de rango (index < 0 || index > size()
)Verifique el
size()
de su lista antes de llamarlist.add(1, object1)
fuente
list.add("element");
Debe completar los índices vacíos con valores nulos.
fuente
al intentar agregar un elemento en la posición especificada, obtuvo IndexOutOfBound, por lo que la lista debe tener algunos elementos en su posición.
Por favor intente seguir
fuente
¿Qué tal este pequeño
while
bucle como solución?fuente
Esta es una posible solución:
fuente
Creo que la solución de medopal es lo que estás buscando.
Pero solo otra solución alternativa es usar un HashMap y usar la clave (Integer) para almacenar posiciones.
De esta manera, no necesitará llenarlo con valores nulos, etc. inicialmente, solo pegue la posición y el objeto en el mapa a medida que avanza. Puede escribir un par de líneas al final para convertirlo en una Lista si así lo necesita.
fuente
Supongamos que desea agregar un elemento en una posición, entonces el tamaño de la lista debe ser mayor que la posición.
add(2, item)
: esta sintaxis significa, mover el elemento anterior en la posición 2 al siguiente índice y agregar el elemento en la segunda posición.Si no hay ningún elemento en la segunda posición, esto no funcionará, arrojará una excepción.
Eso significa que si quieres agregar algo en
position 2,
el tamaño de su lista debe ser al menos
(2 + 1) =3,
para que los artículos estén disponibles en0,1,2 Position.
de esa forma se garantiza que se acceda a la posición 2 de forma segura y no habrá excepción.
fuente
Si está utilizando el sabor de Android de Java, podría sugerirle que use un SparseArray . Es un mapeo de enteros a objetos más eficiente en la memoria y más fácil de iterar que un Map
fuente
Un poco tarde pero con suerte aún puede ser útil para alguien.
2 pasos para agregar elementos a una posición específica en un
ArrayList
add
elementos nulos a un índice específico en unArrayList
Luego
set
las posiciones como y cuando sea necesario.De esta manera, no tiene elementos redundantes,
ArrayList
es decir, si fuera a agregar elementos como,Esto no sobrescribirá los elementos existentes en la posición simplemente, desplazando los existentes a la derecha por uno, por lo que tiene una ArrayList con el doble de indicaciones.
fuente
Debe establecer en lugar de agregar para reemplazar el valor existente en el índice.
La lista contendrá [objeto1, objeto2]
fuente