Procurar String em Array

14 respostas
R

Pessoal como é a melhor maneira de eu procurar uma String num ArrayList?

14 Respostas

D

for( Iterator it = list.iterator(); it.hasNext(); ) { String s = (String) it.next(); if( s.equals( blablabla ) ) { //IGUAL } }

L

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

R

O que vc considera de um Array Grande?

L

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

T

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.

R

É 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?

T

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” );

R

Valeu pessoal!!!

Z

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…)

T

Olhando o src.zip (ArrayList.java):

  • indexOf é uma busca seqüencial
  • contains é só um shortcut para “return indexOf(___) >= 0”
Z

Opa… valeu! :thumbup:

R

Tanto a alternativa do Lipe qto a do Daniel só pega o 1º item doa array

Z

Mas como o objetivo é procurar - saber se existe ou não -, achar o primeiro já é suficiente.

Criado 17 de maio de 2005
Ultima resposta 21 de mai. de 2005
Respostas 14
Participantes 6