web-dev-qa-db-fra.com

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

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 dira pas quels sont ceux qui sont disponibles. 

80
ufk

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
}
124
Amarghosh

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.

63
pli

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.

12
Paul McKenzie

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.

7
stacker

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()) {
    ...
}
5
AamirR

Vous pouvez vérifier la taille d'une ArrayList à l'aide de la méthode size(). Cela retournera l'index maximum +1

3
jwoolard

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
1
Anton Balaniuc

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;
}
1
t3dodson

un moyen simple de faire ceci:

try {
  list.get( index ); 
} 
catch ( IndexOutOfBoundsException e ) {
  if(list.isEmpty() || index >= list.size()){
    // Adding new item to list.
  }
}
0
Josué

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()

0
Dmitry

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'
    }
}
0
miku