Colecoes - como nao salver 2x o mesmo valor?

10 respostas
P

Opa :smiley:

Alguém sabe se tem algum tipo de Colecao q nao armazena 2x o mesmo valor? Ex.: se eu tentar gravar ‘1’ e ‘1’, provavelmente vai inserir 2x. Tem como evitar isso?

Eu fiz um método meio tosco haha

for (int b = 0; b < faixaPrecosTemp.size(); b++) {
					boolean registroExistente = false;
					FaixaVO tempFaixa = (FaixaVO) faixaPrecosTemp
							.get(b);
					for (int c = 0; c < faixaPrecosTemp.size(); c++) {
						FaixaVO tempFaixaComparada = (FaixaVO) faixaPrecosTemp
								.get(c);
						if (tempFaixaComparada.getCdFaixaPreco() != null
								&& tempFaixa.getCdFaixaPreco() != null
								&& tempFaixa.getCdFaixaPreco().intValue() == tempFaixaComparada
										.getCdFaixaPreco().intValue()) {
							registroExistente = true;
							break;
						}
					}
					if(!registroExistente){
						faixasDistintasEncontradas.add(tempFaixa);
					}
				}

10 Respostas

KWill

padcoe:
Opa :smiley:

Alguém sabe se tem algum tipo de Colecao q nao armazena 2x o mesmo valor? Ex.: se eu tentar gravar ‘1’ e ‘1’, provavelmente vai inserir 2x. Tem como evitar isso?

Use Sets, que são coleções não admitem elementos repetidos.

Inté.

xandevieira

tem sim:

java.util.Set;
Djonatah

O Colega citou bem - collections que implementam a interface Set não permitem elementos com valores duplicados… (TreeSet, HashSet, e LinkedHashSet são as que eu conheço).

Se você não quer identificadores (Keys) repetidos use collections que implementam a interface Map

<><

P

Mas eu dou new no Objeto e seto um campo dele…por isso q eu percorri novamente a lista…cada vez q eu der new no objeto, ele vai ter um ‘id’ diferente e não vai dar q o objeto é igual, certo?

Djonatah

Eu não entendi a pergunta [:D]

O que você está chamdno do “ser igual” - dois objetos sãoi iguais quando o método equals() retorna true.

<><

P

Cara…simples:

List galinhas = new ArrayList();
Galinha g1 = new Galinha();
g1 .setId(1);
galinhas.add(g1);
Galinha g2 = new Galinha();
g2 .setId(1);
galinhas.add(g2);

As 2 Galinhas possuem o mesmo Id, mas são objetos diferentes. É exatamente isso que estou enfrentando, eu queria saber se tem alguma forma de eu evitar inserir 2x o objetos diferentes mas com o mesmo valor?

Eu to tendo que percorrer a lista 2x, será que usar um Map e setar o Id como Key, resolveria?

[]'s

xandevieira

usa HashMap e use o id como chave

Djonatah

Se você não quer IDs iguais você pode sim usar uma HashMap, e como o colega comentou usando o o ID como chave (considerando que ID é um inteiro :slight_smile: )

R

padcoe:
Cara…simples:

List galinhas = new ArrayList();
Galinha g1 = new Galinha();
g1 .setId(1);
galinhas.add(g1);
Galinha g2 = new Galinha();
g2 .setId(1);
galinhas.add(g2);

As 2 Galinhas possuem o mesmo Id, mas são objetos diferentes. É exatamente isso que estou enfrentando, eu queria saber se tem alguma forma de eu evitar inserir 2x o objetos diferentes mas com o mesmo valor?

Eu to tendo que percorrer a lista 2x, será que usar um Map e setar o Id como Key, resolveria?

[]'s

Já que para você 2 galinhas são iguais quando possuem o mesmo id, então basta você:

  1. Implementar o método equals da classe Galinha que retorna true se os ids são iguais.
  2. Ao invés de usar List/ArrayList, utilize Set/HashSet.

Ex.:

public class Galinha {

//...

public boolean equals(Object galinha) {
   if(galinha instanceof Galinha) {
      return this.getId().equals((Galinha)galinha)).getId());
      //Se getId retorna um tipo primitivo, então troque por this.getId() == (Galinha)galinha)).getId()
   } else {
      return false;
   }
}

//...
}
Set galinhas = new HashSet();
Galinha g1 = new Galinha();
g1 .setId(1);
galinhas.add(g1);
Galinha g2 = new Galinha();
g2 .setId(1);
galinhas.add(g2);

//Itera sobre galinhas e só vai ter uma...

Pode haver algum erro de compilação aí porque digitei daqui do fórum, mas o que vale é a idéia.

wm1

Apenas reafirmando o que já foi dito:

Tudo que for Set, implementa o conceito matemático de conjunto (somente um elemento com a mesmo significado semântico pode estar presente). Se o equals estiver implementado corretamente, não vai haver repetições.

Criado 17 de dezembro de 2008
Ultima resposta 19 de dez. de 2008
Respostas 10
Participantes 6