Pessoal como é a melhor maneira de eu procurar uma String num ArrayList?
for( Iterator it = list.iterator(); it.hasNext(); ) {
String s = (String) it.next();
if( s.equals( blablabla ) ) {
//IGUAL
}
}
Olá
Cuidado! Depende do tamanho do ArrayList. Fazer buscas na força bruta pode consumir tempo demais. As vezes é mais rápido ordenar o array primeiro. No mínimo fazer algo assim:
. . .
List<String> list = Arrays.asList(aList);
Collections.sort(list);
. . .
Veja mais em:
http://java.sun.com/docs/books/tutorial/collections/algorithms/index.html
Making Java Objects Comparable
[]s
Luca
O que vc considera de um Array Grande?
Olá
Aquele que demorar mais para fazer buscas na força bruta do que a soma dos tempos de fazer a ordenação e a busca binária em array ordenado que é bem simples.
Se o array vier de uma base de dados pode ser que já venha ordenado. Se o array for construído por você, é possível também já armazená-lo ordenado, usar algum tipo de árvore ou usar uma tabela hash. Tudo vai depender de uma análise caso a caso. Este foi o motivo porque eu disse para tomar cuidado com buscas na força bruta.
[]s
Luca
Mais conhecido como “Puxa vida, na minha máquina e no meu ambiente de teste a aplicação era tão rapidinha, porque é que ela é tão lenta no cliente? Deve ter um vírus ou um trojan na máquina dele. A culpa é toda do Bill (ou do Linus)!”
Buscas usando força bruta às vezes tem dessas coisas.
É um array q seré alimentado pelo bd e já virá ordenado, outra coisa como posso pegar a posição dele no array, depois de eu encontrar como o daniel mostrou?
Se você estiver usando um array, Arrays.binarySearch faz a mágica para você. Veja a documentação.
Se estiver usando um ArrayList, use Collections.binarySearch.
ArrayList.indexOf( “string” );
pra saber se tem
ArrayList.contains( “string” );
Valeu pessoal!!!
Acho que o indexOf() faz busca sequencial, então cai na mesma de sair varrendo a List com um for.
Alguém tem idéia da implementação do contains()? (ou onde pode ser encontrada…)
Olhando o src.zip (ArrayList.java):
- indexOf é uma busca seqüencial
- contains é só um shortcut para “return indexOf(___) >= 0”
Opa… valeu! :thumbup:
Tanto a alternativa do Lipe qto a do Daniel só pega o 1º item doa array
Mas como o objetivo é procurar - saber se existe ou não -, achar o primeiro já é suficiente.