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?
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 dira pas quels sont ceux qui sont disponibles.
La méthode arrayList.size()
renvoie le nombre d'éléments de la liste - donc si l'index est supérieur ou égal à la size()
, il n'existe pas.
if(index >= myList.size()){
//index not exists
}else{
// index exists
}
Bien que vous ayez une douzaine de suggestions sur l’utilisation de la taille de votre liste, qui fonctionne pour les listes à entrées linéaires, personne ne semble avoir lu votre question.
Si vous ajoutez des entrées manuellement à différents index, aucune de ces suggestions ne fonctionnera, car vous devez rechercher un index spécifique.
Utiliser if (list.get (index) == null) ne fonctionnera pas non plus, car get () lève une exception au lieu de renvoyer null.
Essaye ça:
try {
list.get( index );
} catch ( IndexOutOfBoundsException e ) {
list.add( index, new Object() );
}
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.
C'est ce dont vous avez besoin ...
public boolean indexExists(final List list, final int index) {
return index >= 0 && index < list.size();
}
Pourquoi ne pas utiliser un vieux tableau ordinaire? L'accès indexé à une liste est une odeur de code, je pense.
En ce qui concerne votre mise à jour (ce qui devrait probablement être une autre question)… .. Vous devez utiliser un tableau de ces objets à la place de ArrayList, Afin de pouvoir simplement vérifier la valeur pour null:
Object[] array = new Object[MAX_ENTRIES];
..
if ( array[ 8 ] == null ) {
// not available
}
else {
// do something
}
Meilleur entrainement
Si vous n'avez pas des centaines d'entrées dans votre tableau, vous devriez envisager de l'organiser en tant que classe pour vous débarrasser des nombres magiques 3,8, etc.
Le flux de contrôle utilisant une exception est une mauvaise pratique.
D'habitude je vérifie juste si l'index est inférieur à la taille du tableau
if (index < list.size()) {
...
}
Si vous êtes également préoccupé par le fait que l’index soit une valeur négative, utilisez la commande suivante
if (index >= 0 && index < list.size()) {
...
}
Vous pouvez vérifier la taille d'une ArrayList
à l'aide de la méthode size()
. Cela retournera l'index maximum +1
Depuis Java-9
, il existe un moyen standard de vérifier si un index appartient au tableau - Objects # checkIndex () :
List<Integer> ints = List.of(1,2,3);
System.out.println(Objects.checkIndex(1,ints.size())); // 1
System.out.println(Objects.checkIndex(10,ints.size())); //IndexOutOfBoundsException
Test rapide et sale pour savoir si un index existe ou non. dans votre implémentation, remplacez la liste Avec votre liste, vous testez.
public boolean hasIndex(int index){
if(index < list.size())
return true;
return false;
}
ou pour les tableaux 2Dimensional ...
public boolean hasRow(int row){
if(row < _matrix.size())
return true;
return false;
}
un moyen simple de faire ceci:
try {
list.get( index );
}
catch ( IndexOutOfBoundsException e ) {
if(list.isEmpty() || index >= list.size()){
// Adding new item to list.
}
}
Si votre index est inférieur à la taille de votre liste, il existe, éventuellement avec la valeur null
. Si index est plus grand, vous pouvez appeler ensureCapacity()
pour pouvoir utiliser cet index.
Si vous voulez vérifier si une valeur à votre index est null
ou non, appelez get()
Vous pouvez vérifier la taille du tableau.
package sojava;
import Java.util.ArrayList;
public class Main {
public static Object get(ArrayList list, int index) {
if (list.size() > index) { return list.get(index); }
return null;
}
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(""); list.add(""); list.add("");
System.out.println(get(list, 4));
// prints 'null'
}
}