Estou usando ArrayList<String>
e adiciono dados em índices específicos, como posso verificar se existe um índice específico?
Devo simplesmente get()
verificar o valor? Ou devo esperar por uma exceção? Existe outra maneira?
Atualizar
Obrigado por suas respostas, mas porque estou apenas adicionando coisas em índices específicos, o comprimento da lista não vai me mostrar quais estão disponíveis.
get()
verificarnull
- não dependa de exceções. Considere o uso de umaHashTable
vez java.sun.com/j2se/1.4.2/docs/api/java/util/Hashtable.htmlRespostas:
O método
arrayList.size()
retorna o número de itens na lista - portanto, se o índice for maior ou igual asize()
, ele não existe.fonte
size()
", pois é um índice baseado em zero.index = 0
e minhalist.size() == 0
também. então a primeira vez que verificar será verdade e prepararei a lista para fazer coisas. mas da próxima vez nesse índice, meu índice ainda estaráindex = 0
e agora estou reinicializando esse elemento na lista quando deveria estar fazendo coisas. O primeiro pensamento é para&&
uma segunda condição comolist.get(index) == null
mas que não está funcionando é por que há perguntas como estaEmbora você tenha uma dúzia de sugestões sobre como usar o tamanho de sua lista, que funcionam para listas com entradas lineares, ninguém pareceu ter lido sua pergunta.
Se você adicionar entradas manualmente em índices diferentes, nenhuma dessas sugestões funcionará, pois você precisa verificar um índice específico.
Usar if (list.get (index) == null) também não funcionará, pois get () lança uma exceção em vez de retornar null.
Experimente isto:
Aqui, uma nova entrada é adicionada se o índice não existir. Você pode alterá-lo para fazer algo diferente.
fonte
try/catch
para este tipo de trabalho, pois isso tornará seu programa mais lento em 50% ou talvez mais .. a verificação de erros adiciona como uma correia ao seu código existente para desacelerá-lo .. melhor evitá-lo em áreas críticas. Verificarlength
neste caso é a melhor coisa que você pode fazer, uma vez que oindex
sempre será menor que olength
antigoindex
será alterado e se tornará novoindex
se vocêremove
os fizer, então é por isso que a verificação de regralength
sempre funcionará.Isto é o que você precisa ...
Por que não usar um array simples e antigo? O acesso indexado a uma lista é um cheiro de código, eu acho.
fonte
Normalmente eu apenas verifico se o índice é menor que o tamanho do array
Se você também está preocupado com o índice ser um valor negativo, use o seguinte
fonte
Em relação à sua atualização (que provavelmente deve ser outra pergunta). Você deve usar uma matriz desses objetos em vez de uma ArrayList, para que possa simplesmente verificar o valor de null:
Melhor prática
Se você não tiver centenas de entradas em seu array, deve considerar organizá-lo como uma classe para se livrar dos números mágicos 3,8 etc.
O fluxo de controle usando exceção é uma prática ruim.
fonte
Uma vez que
java-9
existe uma maneira padrão de verificar se um índice pertence à matriz - Objetos # checkIndex () :fonte
of()
método também é adicionado em Java 9 à lista de classes : docs.oracle.com/javase/9/docs/api/java/util/List.html#of--Você pode verificar o tamanho de um
ArrayList
usando osize()
método. Isso retornará o índice máximo +1fonte
uma maneira simples de fazer isso:
fonte
Teste rápido e sujo para verificar se um índice existe ou não. em sua lista de substituição de implementação Com sua lista, você está testando.
ou para ArrayLists 2D ...
fonte
.length
,list.size()
mas não é grande coisa Eu estrago assim o tempo todo haha Eu confio no compilador para me guiar nisso. Você provavelmente estava pensando em matrizes primitivasSe o seu índice for menor que o tamanho da sua lista, ele existe, possivelmente com
null
valor. Se o índice for maior, você pode chamarensureCapacity()
para poder usar esse índice.Se você quiser verificar se um valor em seu índice é
null
ou não, chameget()
fonte
Você pode verificar o tamanho da matriz.
fonte