Evitar o Contains do ArrayList

Boas malta Guj ca vou eu denovo com minhas duvidas…

Há alguma maneira de usar não usar o contains e ver se um elemento ta num arraylist?

eu tnho codigo que preciso otimiza-lo pois para pekenos testes ele safa-se, mas para uma quantidade enorme de outputs leva muito tempo o que leva o Contains a baixar a performance do meu codigo.

quero adicionar uma string a um arraylist


if(!cidades.contains(cidade_aux))
cidades.add(cidade_aux);

para uma cidade funciona na boa…

mais kuando ja sao aos pontapés…esse contains engata meu codigo…

alguma dica…

Mude para um Map (ou Set, se nao houver duplicados).

Rafael

Só completando o que o Rafael disse.

Set<String> cidades = new LinkedHashSet<String>(); // use new TreeSet<String>() se quiser que as cidades sempre fiquem em ordem alfabética

cidades.add ("Lisboa");
cidades.add ("Porto");
cidades.add ("Vila Nova de Gaia");
cidades.add ("Amadora");
cidades.add ("Funchal");
cidades.add ("Setúbal");
cidades.add ("Guimarães");
if (cidades.contains ("Funchal"))... // mais rápido que no ArrayList

Só uma coisinha. No caso do Set, não é preciso chamar “contains” antes de adicionar algo a ele; o único problema (ou solução) é que ele não admite elementos repetidos.

Boos thingol valeu ai a ajuda…

Mas o problema que surgui é k antes eu tinha este metodos que me retorna um arraylist de filas com prioridade

[code]static ArrayList<PriorityQueue> buildPriority(int n_cities) {
ArrayList<PriorityQueue> aux_lista = new ArrayList<PriorityQueue>();
while (n_cities > 0) {

		aux_lista.add(new PriorityQueue<Vertice>());
		n_cities--;
	}
	return aux_lista;
}[/code]

e tnho estes ciclos cujo o objectivo é das cidade diferente em uma fila ou sejas todas cidades com mesmo nome ficam em cada fila.
com estes ciclos tinha tudo resolvido:[code]
for (int y = 0; y < cities.size(); y++) {
if (cities.get(y).equals(v_partida.getcidade())) {
build.get(y).add(v_partida);

						}[/code]

para a cidade de destino:[code]
for (int z = 0; z < cities.size(); z++) {

						if (cities.get(z).equalsIgnoreCase(
								v_chegada.getcidade())) {

							build.get(z).add(v_chegada);
						}
					}[/code]

antes isso dava bm…com arraylist com o Set ou treeset isso dava em malukeira!!!

Conserve os seus dados em um arraylist sempre ordenado, e faça busca binária. (É claro que eu vi que você tem 2 arraylists paralelos pelo menos; isso vai dar alguns problemas porque você precisa ordenar um e deixar o outro em paralelo na mesma ordem.)

Pois com arralist dava bm , o problema era mesmo a perfomance…
Mas o prazo da entraga passou…eu tenho projecto a dar os resultados que se quer…o problema é mesmo a perfomance…vou ter meia 50% da cotaçao…
Mas é a vida…
Obrigado pela ajuda Thingol… :wink: