J'utilise ArrayList<String>
et j'ajoute des données à des index spécifiques, comment puis-je vérifier si un index spécifique existe?
Dois-je simplement get()
et vérifier la valeur? Ou devrais-je attendre une exception? Y a-t-il un autre moyen?
Mettre à jour
Merci pour vos réponses, mais comme je n'ajoute que des éléments à des index spécifiques, la longueur de la liste ne me montrera pas lesquels sont disponibles.
get()
vérifiernull
- ne vous fiez pas aux exceptions. Pensez à utiliser à laHashTable
place un java.sun.com/j2se/1.4.2/docs/api/java/util/Hashtable.htmlRéponses:
La méthode
arrayList.size()
renvoie le nombre d'éléments dans la liste - donc si l'index est supérieur ou égal àsize()
, il n'existe pas.la source
size()
" puisqu'il s'agit d'un index de base zéro.index = 0
et la miennelist.size() == 0
aussi. donc la première fois que je vérifierai ce sera vrai et je préparerai la liste pour faire des choses. mais la prochaine fois à cet index, mon index sera toujoursindex = 0
et maintenant je réinitialise cet élément dans la liste alors que j'étais censé faire des choses. La première pensée est à&&
une deuxième condition,list.get(index) == null
mais cela ne fonctionne pas, c'est pourquoi il y a des questions comme celle-ciBien que vous ayez reçu une douzaine de suggestions sur l'utilisation de la taille de votre liste, qui fonctionnent pour les listes avec des entrées linéaires, personne n'a semblé lire votre question.
Si vous ajoutez manuellement des entrées à différents index, aucune de ces suggestions ne fonctionnera, car vous devez rechercher un index spécifique.
L'utilisation de if (list.get (index) == null) ne fonctionnera pas non plus, car get () lève une exception au lieu de renvoyer null.
Essaye ça:
Ici, une nouvelle entrée est ajoutée si l'index n'existe pas. Vous pouvez le modifier pour faire quelque chose de différent.
la source
try/catch
pour ce genre de travail, cela ralentira votre programme de 50% ou peut-être plus. La vérification des erreurs ajoute comme une sangle à votre code existant pour le ralentir .. mieux vaut l'éviter dans les zones critiques. Vérifierlength
dans ce cas est la meilleure chose que vous puissiez faire, puisque leindex
sera toujours moins que lelength
, les anciensindex
seront décalés et deviendront nouveauxindex
si vousremove
eux, c'est pourquoi la vérification des règles fonctionneralength
toujours.C'est ce dont vous avez besoin ...
Pourquoi ne pas utiliser un ancien tableau? L'accès indexé à une liste est une odeur de code, je pense.
la source
Habituellement, je vérifie simplement si l'index est inférieur à la taille du tableau
Si vous craignez également que l'indice soit une valeur négative, utilisez ce qui suit
la source
Concernant votre mise à jour (qui devrait probablement être une autre question). Vous devez utiliser un tableau de ces objets à la place d'une ArrayList, vous pouvez donc simplement vérifier la valeur de null:
Meilleur entrainement
Si vous n'avez pas des centaines d'entrées dans votre tableau, vous devriez envisager de l'organiser en classe pour vous débarrasser des nombres magiques 3,8 etc.
Contrôler le flux à l'aide d'une exception est une mauvaise pratique
la source
Puisqu'il
java-9
existe un moyen standard de vérifier si un index appartient au tableau - Objects # checkIndex () :la source
of()
La méthode est également ajoutée dans Java 9 à la liste de classe : docs.oracle.com/javase/9/docs/api/java/util/List.html#of--Vous pouvez vérifier la taille d'un en
ArrayList
utilisant lasize()
méthode. Cela renverra l'indice maximum +1la source
un moyen simple de le faire:
la source
Test rapide et sale pour savoir si un index existe ou non. dans votre implémentation, remplacez la liste Avec votre liste que vous testez.
ou pour les listes de tableaux 2Dimensional ...
la source
.length
qu'il a ,list.size()
mais il est pas grand - chose que je visse comme ça tout le temps haha je compte sur le compilateur pour me guider sur celui - là. VousSi votre index est inférieur à la taille de votre liste, il existe, éventuellement avec une
null
valeur. Si l'index est plus grand, vous pouvez appelerensureCapacity()
pour pouvoir utiliser cet index.Si vous souhaitez vérifier si une valeur de votre index est
null
ou non, appelezget()
la source
Vous pouvez vérifier la taille du tableau.
la source