130 votes

ArrayList - comment puis-je vérifier si un index existe ?

J'utilise ArrayList<String> et j'ajoute des données à des indices spécifiques, comment puis-je vérifier si un indice 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 ?

Mise à jour : Merci pour vos réponses, mais comme je n'ajoute que des éléments à des indices spécifiques, la longueur de la liste ne me montrera pas lesquels sont disponibles.

190voto

Amarghosh Points 33957

La méthode arrayList.size() renvoie le nombre d'éléments dans la liste - donc si l'indice est supérieur ou égal à size(), il n'existe pas.

if(index >= myList.size() || index < 0){
  //index does not exists
}else{
 // index exists
}

13voto

Paul McKenzie Points 4841

Voici 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 simple ? L'accès indexé à une liste est une odeur de code, je pense.

10voto

R-Aamir Points 3525

Habituellement, je vérifie simplement si l'indice est inférieur à la taille du tableau

if (index < list.size()) {
    ...
}

Si vous craignez également que l'indice soit une valeur négative, utilisez les valeurs suivantes :

if (index >= 0 && index < list.size()) {
    ...
}

6voto

stacker Points 34209

Concernant votre mise à jour (qui devrait probablement être une autre question). Vous devriez utiliser un tableau de ces objets à la place d'une ArrayList, de sorte que vous pouvez simplement vérifier la valeur de NULL :

Object[] array = new Object[MAX_ENTRIES];
..
if ( array[ 8 ] == null ) {
   // not available
}
else {
   // do something
}

Meilleures pratiques

Si vous n'avez pas une centaine 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 en utilisant l'exception est une mauvaise pratique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X