Para um aplicativo Android, tenho a seguinte funcionalidade
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;
}
Essa é a "melhor" maneira de escrever uma função para obter a posição de um elemento? Ou há uma função nativa shmancy chique em java que eu deveria aproveitar?
==
produzirá resultados incorretos na maioria dos casos.==
... não é o tipo certo de comparação ;-)String.equals
mais parecido com o que===
pode ser em uma linguagem como JavaScript? por exemplo. verifica o valor E o tipo?==
É identidade de objeto e significa "é o mesmo objeto" . (Esta visão é verdadeira para valores primitivos, bem como tipos de referência, se você considerar que há apenas um número com o valor 42 ou char 'x', etc).Object.equals
é um método virtual definido para todas as instâncias de objeto e significa "tem o mesmo valor" , já que todos os tipos de classe estendem Object, e deve ser usado para todos os testes de igualdade de objeto . Há muitas perguntas na capa==
vsObject.equals
e este é um conceito muito importante para entender! Por exemplo, isso é falso"hello" == new String("hello")
:! Doh!Respostas:
ArrayList
tem umindexOf()
método . Verifique a API para obter mais informações, mas funciona assim:indexOf()
retornará exatamente o que seu método retorna, rápido.fonte
==
enquanto indexOf usaequals()
.Produto: Índice de lista: 7
Se você passar H, ele retornará 7 , se passar J, ele retornará -1 como definimos o valor padrão para -1.
Feito
fonte
Se o seu
List
estiver classificado e tiver um bom acesso aleatório (assim comoArrayList
), você deve verificarCollections.binarySearch
. Caso contrário, você deve usarList.indexOf
, como outros apontaram.Mas seu algoritmo é bom, fwiw (além dos
==
outros apontaram).fonte
De fato, há uma função nativa shmancy sofisticada em java que você deve aproveitar.
ArrayList tem um método de instância chamado
indexOf(Object o)
(http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html)
Você seria capaz de chamá-lo da
_categories
seguinte maneira:_categories.indexOf("camels")
Não tenho experiência com programação para Android - mas isso funcionaria para um aplicativo Java padrão.
Boa sorte.
fonte
A API Java especifica dois métodos que você pode usar:
indexOf(Object obj)
elastIndexOf(Object obj)
. O primeiro retorna o índice do elemento se encontrado, -1 caso contrário. O segundo retorna o último índice, que seria como pesquisar na lista para trás.fonte
A melhor maneira de encontrar a posição do item na lista é usando a interface de coleções,
Por exemplo,
Produto: 2
fonte
Use o método indexOf () para encontrar a primeira ocorrência do elemento na coleção.
fonte