Pessoal qual o critério de manipulação de uma classe TreeMap e TreeSet?
Pelo que entendi ele considera que algo existe pelos métodos de ordenação, estou correto?
package mateus.estudos;
import java.util.Set;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
Cat c1 = new Cat("A", 2);
Cat c2 = new Cat("A", 6);
System.out.println("Equals : "+c1.equals(c2));
Set gat = new TreeSet();
gat.add(c1);
gat.add(c2);
System.out.println(gat.size());
for (Object d : gat) {
System.out.println(d);
}
}
}
class Cat implements Comparable<Cat> {
String nome;
int idade;
public Cat(String nome, int idade) {
this.nome = nome;
this.idade = idade;
}
public int compareTo(Cat o) {
return this.nome.compareTo(o.nome);
}
@Override
public String toString() {
return this.nome+" "+this.idade;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + idade;
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Cat other = (Cat) obj;
if (idade != other.idade)
return false;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
return true;
}
}
Neste caso o TreeSet não insere o elemento, pois de acordo com a comparação de compareTo ele já existe (retorna 0)
Mas se por acaso eu modificar e deixar um pouco mais específico o compareTo
...
public int compareTo(Cat o) {
return this.nome.compareTo(o.nome)+ Integer.valueOf(this.idade).compareTo(Integer.valueOf(o.idade));
}
...
Ele insere pois ele não é mais único (do ponto de vista do compareTo) já que ele não retorna mais 0, neste caso a implementação de equals não tem nenhuma serventia.
O que vocês acham ?