web-dev-qa-db-fra.com

Meilleure façon de trouver l'index d'un élément dans ArrayList?

Pour une application Android, les fonctionnalités suivantes sont disponibles:

private ArrayList<String> _categories; // eg ["horses","camels"[,etc]]

private int getCategoryPos(String category) {
    for(int i = 0; i < this._categories.size(); ++i) {
        if(this._categories.get(i) == category) return i;
    }

    return -1;
}

Est-ce le "meilleur" moyen d'écrire une fonction pour obtenir la position d'un élément? Ou existe-t-il une fonction native sophistiquée de shmancy dans Java que je devrais utiliser?

78
Jacksonkr

ArrayList a une méthode indexOf() . Vérifiez l’API pour plus d’informations, mais voici comment cela fonctionne:

private ArrayList<String> _categories; // Initialize all this stuff

private int getCategoryPos(String category) {
  return _categories.indexOf(category);
}

indexOf() retournera exactement ce que votre méthode retourne, rapidement.

177
Jon Egeland
ArrayList<String> alphabetList = new ArrayList<String>();
alphabetList.add("A"); // 0 index
alphabetList.add("B"); // 1 index
alphabetList.add("C"); // 2 index
alphabetList.add("D"); // 3 index
alphabetList.add("E"); // 4 index
alphabetList.add("F"); // 5 index
alphabetList.add("G"); // 6 index
alphabetList.add("H"); // 7 index
alphabetList.add("I"); // 8 index

int position = -1;
position = alphabetList.indexOf("H");
if (position == -1) {
    Log.e(TAG, "Object not found in List");
} else {
    Log.i(TAG, "" + position);
}

Sortie: Index de la liste: 7

Si vous passez H il retournera 7, si vous passez J il retournera - 1 comme nous avons défini la valeur par défaut à -1.

Fait

14
Hiren Patel

Si votre List est trié et dispose d'un bon accès aléatoire (comme ArrayList, vous devriez vous pencher sur Collections.binarySearch. Sinon, vous devez utiliser List.indexOf, comme d'autres l'ont fait remarquer.

Mais votre algorithme est sain, fwiw (autre que le == que d'autres ont signalé).

6
yshavit

Il existe en effet une fonction native sophistiquée de shmancy dans Java que vous devriez utiliser.

ArrayList a une méthode d'instance appelée

indexOf(Object o)

(http://docs.Oracle.com/javase/6/docs/api/Java/util/ArrayList.html)

Vous pourrez l'appeler sur _categories comme suit:

_categories.indexOf("camels")

Je n'ai aucune expérience en programmation pour Android - mais cela fonctionnerait pour une application standard Java.

Bonne chance.

3
klyngbaek

L'API Java spécifie deux méthodes que vous pouvez utiliser: indexOf(Object obj) et lastIndexOf(Object obj). Le premier retourne l'index de l'élément s'il est trouvé, -1 sinon. Le second retourne le dernier index, ce serait comme chercher dans la liste à l'envers.

2
danca