93 votes

Meilleur moyen de trouver l'index d'un élément dans ArrayList ?

Pour une application Android, j'ai les fonctionnalités suivantes

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 la "meilleure" façon d'écrire une fonction pour obtenir la position d'un élément ? Ou existe-t-il une fonction native fantaisiste en Java que je devrais utiliser ?

199voto

Jon Points 4637

ArrayList a un indexOf() méthode . Consultez l'API pour en savoir plus, 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.

17voto

Hiren Patel Points 15583
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);
}

Output: Index des listes : 7

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

Terminé

6voto

yshavit Points 15028

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

Mais votre algorithme est sain, pour info (autre que le == d'autres l'ont souligné).

3voto

klyngbaek Points 728

Il existe en effet une fonction native fantaisiste en Java que vous devriez utiliser.

ArrayList possède 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 de la programmation pour Android, mais cela fonctionnerait pour une application Java standard.

Bonne chance.

3voto

danca Points 459

L'API Java spécifie deux méthodes que vous pouvez utiliser : indexOf(Object obj) y lastIndexOf(Object obj) . Le premier renvoie l'index de l'élément s'il est trouvé, -1 sinon. La seconde renvoie le dernier indice, ce qui reviendrait à chercher dans la liste à l'envers.

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