Procurar String em Array

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

Java Glossary : sort

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.