Como evitar arrays repetidos dentro de ArrayList?

3 respostas
gledson85

Preciso criar um ArrayList para guardar arrays, mas preciso evitar que entre um array que possua valores iguais de outro array que já está no ArrayList.

import java.util.ArrayList;

public class comparadora {
	public static void main(String args[]) {
		ArrayList guarda = new ArrayList();
		int valor1[] = { 1, 2, 3, 4, 5, 6 };
		int valor2[] = { 4, 2, 6, 7, 8, 9 };
		int valor3[] = { 1, 2, 3, 4, 5, 6 };
		int valor4[] = { 1, 2, 3, 4, 5, 6 };
		guarda.add(valor1);
		guarda.add(valor2);
		guarda.add(valor3);
		guarda.add(valor4);
		comparadora p = new comparadora();
		p.compara(guarda);
	}

	public void compara(ArrayList guarda) {
		int contador = 0;

		for (int i = 0; i < guarda.size(); i++) {
			int recupera1[] = (int[]) guarda.get(contador);
			int recupera2[] = (int[]) guarda.get(i + 1);
			int comparador[] = new int[recupera1.length];
			for (int j = 0; j < recupera1.length; j++) {
				if (recupera1[j] == recupera2[j]) {
					comparador[j] = 1;
				} else {
					comparador[j] = 0;
				}
			}
			for (int h = 0; h < comparador.length; h++) {
				System.out.print("[" + comparador[h] + "]");
			}
			System.out.println();
			// contador++;
		}
	}
}

Este código que criei é bem monstruoso, compara os arrays dentro do ArrayList retornando com outro array preenchido de zeros e ums.

Alguém pode me dar uma sugestão melhor???

3 Respostas

ViniGodoy

Não seria melhor testar se o Array já está lá dentro na hora de fazer um add? Assim você impede que um elemento duplicado entre.

guilherme.chapiewski

Olha, como não se sabe o contexto da sua aplicação fica meio complicado de sugerir. Mas você pode fazer tanto coisas simples quanto o que o ViniGodoy sugeriu (e que funcionarão perfeitamente) como pode fazer também coisas mais complicadas como criar uma subclasse de ArrayList que o equals esteja refletindo o valor de todos os elementos na ArrayList, de forma que duas ArrayLists com objetos iguais tenham o equals igual. E aí você guarda estes objetos dentro de um Set, que já cuidará para que não existam objetos iguais dentro dele.

Dá pra fazer milhares de coisas, basta usar a criatividade :smiley:

gledson85

Vou terminar este código que estou fazendo. Assim fica melhor pro pessoal que quer ajudar a entender o que preciso fazer.

Faz um bom tempo que não programo, por isso estou passando por esses apertos. :frowning:

Criado 10 de fevereiro de 2007
Ultima resposta 10 de fev. de 2007
Respostas 3
Participantes 3