Evitar o Contains do ArrayList

5 respostas
Alkamavo

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…

5 Respostas

Rafael_Steil

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

Rafael

T

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.

Alkamavo

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
static ArrayList<PriorityQueue<Vertice>> buildPriority(int n_cities) {
		ArrayList<PriorityQueue<Vertice>> aux_lista = new ArrayList<PriorityQueue<Vertice>>();
		while (n_cities > 0) {

			aux_lista.add(new PriorityQueue<Vertice>());
			n_cities--;
		}
		return aux_lista;
	}
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:
for (int y = 0; y < cities.size(); y++) {
							if (cities.get(y).equals(v_partida.getcidade())) {
								build.get(y).add(v_partida);

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

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

								build.get(z).add(v_chegada);
							}
						}

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

T

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

Alkamavo

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:

Criado 8 de julho de 2008
Ultima resposta 9 de jul. de 2008
Respostas 5
Participantes 3