Estoy usando ArrayList<String>
y agrego datos en índices específicos, ¿cómo puedo verificar si existe un índice específico?
¿Debería simplemente get()
comprobar el valor? ¿O debería esperar una excepción? ¿Hay otra manera?
Actualizar
Gracias por sus respuestas, pero debido a que solo agrego cosas en índices específicos, la longitud de la lista no me mostrará cuáles están disponibles.
get()
comprobarlonull
, pero no confíes en las excepciones. Considere usar java.sun.com/j2se/1.4.2/docs/api/java/util/Hashtable.htmlHashTable
en su lugarRespuestas:
El método
arrayList.size()
devuelve el número de elementos de la lista, por lo que si el índice es mayor o igual quesize()
, no existe.fuente
size()
" ya que es un índice de base cero.index = 0
y milist.size() == 0
también. así que la primera vez que lo verifique será cierto y prepararé la lista para hacer cosas. pero la próxima vez en ese índice, mi índice seguirá estandoindex = 0
y ahora estoy reinicializando ese elemento en la lista cuando se suponía que debía estar haciendo cosas. El primer pensamiento es&&
una segunda condición comolist.get(index) == null
pero que no funciona es por eso que hay preguntas como estaSi bien recibió una docena de sugerencias sobre cómo usar el tamaño de su lista, que funciona para listas con entradas lineales, nadie pareció leer su pregunta.
Si agrega entradas manualmente en diferentes índices, ninguna de estas sugerencias funcionará, ya que debe verificar un índice específico.
Usar if (list.get (index) == null) tampoco funcionará, ya que get () genera una excepción en lugar de devolver null.
Prueba esto:
Aquí se agrega una nueva entrada si el índice no existe. Puede modificarlo para hacer algo diferente.
fuente
try/catch
para este tipo de trabajo, ralentizará su programa en un 50% o tal vez más ... la comprobación de errores se agrega como una correa a su código existente para ralentizarlo ... mejor evitarlo en áreas críticas. Verificarlength
en este caso es lo mejor que puede hacer, yaindex
que siempre será menor que lo anteriorlength
, los viejos seindex
cambiarán y se convertirán en nuevosindex
si los usaremove
, por eso la verificación de reglas paralength
siempre funcionará.Esto es lo que necesitas ...
¿Por qué no usar una matriz vieja y simple? El acceso indexado a una lista es un olor a código, creo.
fuente
Por lo general, solo verifico si el índice es menor que el tamaño de la matriz
Si también le preocupa que el índice sea un valor negativo, use lo siguiente
fuente
Con respecto a su actualización (que probablemente debería ser otra pregunta). Debe usar una matriz de estos objetos en lugar de una ArrayList, por lo que simplemente puede verificar el valor para nulo:
Mejores prácticas
Si no tiene cientos de entradas en su matriz, debería considerar organizarla como una clase para deshacerse de los números mágicos 3,8, etc.
Controlar el flujo mediante la excepción es una mala práctica.
fuente
Dado que
java-9
existe una forma estándar de verificar si un índice pertenece a la matriz - Objects # checkIndex () :fuente
of()
El método también se agrega en Java 9 a la lista de clases : docs.oracle.com/javase/9/docs/api/java/util/List.html#of--Puede verificar el tamaño de un
ArrayList
usando elsize()
método. Esto devolverá el índice máximo +1fuente
una forma sencilla de hacer esto:
fuente
Prueba rápida y sucia para determinar si existe un índice o no. en su implementación reemplazar lista Con su lista que está probando.
o para ArrayLists bidimensionales ...
fuente
.length
lo tiene,list.size()
pero no es gran cosa. Me equivoco así todo el tiempo, jaja, confío en el compilador para guiarme en eso. Probablemente estaba pensando en matrices primitivasSi su índice es menor que el tamaño de su lista, entonces existe, posiblemente con
null
valor. Si el índice es más grande, puede llamarensureCapacity()
para poder usar ese índice.Si desea verificar si un valor en su índice es
null
o no, llameget()
fuente
Puede verificar el tamaño de la matriz.
fuente