Está procurando na net, uma collection que não pode se add um objeto repetido. Achei hashSet mais pelo o que eu vi na net eu tenho que implementar hashCode dendro dessa minha classe, para por exemplo atribuir um indice para esse meu objeto.
Peço uma ajuda a vcs, se eu compreendi de maneira errada…
Por favor se alguém poder me ajudar eu agradeço desde já… Mostrando um exemplo…
Você deve implementar o equals e o hashCode para garantir a comparação de um objeto com o outro e assim evitar a repetição. A IDE que você usa(por exemplo: Eclipse) pode facilitar a implementação desses métodos. No Eclipse pode-se gerar clicando com o botão direito do mouse>source>Generate equals e hashCode. Daí você seleciona os campos que serão comparados.
wagnerfrancisco
O que você entende por repetido?
O Set naturalmente não deixa inserir elementos repetidos. Entretanto se o teu critério de igualdade não for o padrão, aí sim você tem que implementar equals/hashCode.
E
entanglement
Em particular eu gosto mais de TreeSet/TreeMap e usar um Comparator (ou implementar Comparable, mas isso também não gosto porque “força a barra”).
A vantagem é que os elementos ficam ordenados - isso para mim é mais intuitivo e útil que o tal do hashCode + equals (para um HashSet/HashMap funcionar corretamente, AMBOS os métodos têm de ser corretamente implementados, não somente hashCode.)
A desvantagem é que a coleção ordenada é ligeiramente mais lenta, mas isso normalmente não é problema.
Michel_M
Teria uma outra forma de fazer, sem a implementação destes métodos??.. ou senão uma outra collection que não necessite fazer isto?
Michel_M
wagnerfrancisco:
O que você entende por repetido?
O Set naturalmente não deixa inserir elementos repetidos. Entretanto se o teu critério de igualdade não for o padrão, aí sim você tem que implementar equals/hashCode.
Um objeto com atributos com o msm valor, independente de case sensitive.
wagnerfrancisco
Qual o problema com a implementação destes métodos? Em algum momento você precisa definir o que são objetos iguais no teu sistema.
Se quiser, pode usar o EqualsBuilder/HashCodeBuilder da lib apache commons. Ele tem métodos que fazem isto via reflection, aí você não precisa ficar implementando tudo. O teu equals seria algo assim sempre: