java - objetos - ¿Mejor forma de encontrar el índice del artículo en ArrayList?
metodos arraylist java (5)
Para una aplicación de Android, tengo la siguiente funcionalidad
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;
}
¿Es esa la "mejor" forma de escribir una función para obtener la posición de un elemento? ¿O hay una función nativa de lujo shmancy en Java que debería aprovechar?
De hecho, hay una función nativa de lujo shmancy en java que debe aprovechar.
ArrayList tiene un método de instancia llamado
indexOf(Object o)
(http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html)
Podrías _categories
en _categories
siguiente manera:
_categories.indexOf("camels")
No tengo experiencia con la programación para Android, pero esto funcionaría para una aplicación Java estándar.
Buena suerte.
La API de Java especifica dos métodos que puede usar: indexOf(Object obj)
y lastIndexOf(Object obj)
. El primero devuelve el índice del elemento si se encuentra, -1 en caso contrario. El segundo devuelve el último índice, sería como buscar la lista al revés.
Si su List
está ordenada y tiene buen acceso aleatorio (como hace ArrayList
), debe buscar en Collections.binarySearch
. De lo contrario, debe usar List.indexOf
, como han señalado otros.
Pero su algoritmo es sonido, fwiw (aparte de los ==
otros han señalado).
ArrayList
tiene un método indexOf()
. Consulte la API para obtener más información, pero así es como funciona:
private ArrayList<String> _categories; // Initialize all this stuff
private int getCategoryPos(String category) {
return _categories.indexOf(category);
}
indexOf()
devolverá exactamente lo que devuelve tu método, rápido.
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);
}
Salida: Índice de lista: 7
Si pasa H , devolverá 7 , si pasa J , devolverá -1, ya que definimos el valor predeterminado en -1.
Hecho