Я проверял набор деревьев и заметил, что не могу обновить значение в наборе деревьев для своего пользовательского объекта.
e.g
class Emp implements Comparable<Emp>
{
int id;
String name;
public Emp(int id,String name)
{
this.id=id;
this.name=name;
}
@Override
public int compareTo(Emp obj) {
if(obj.id>this.id)
return -1;
else if(obj.id<this.id)
return 1;
else
return 0;
}
@Override
public String toString() {
return "Emp Id:"+id+" Emp Name:"+name;
}
}
public static void main(String[] args) {
treesetwithCustom();
}
public static void treesetwithCustom()
{
TreeSet<Emp> set=new TreeSet<Emp>();
set.add(new Emp(1,"ABC"));
set.add(new Emp(2,"XYZ"));
set.add(new Emp(1,"PQR"));
System.out.println(set);
}
Когда я печатаю набор, он показывает значение для Emp ID 1 как ABC, а не PQR.
когда я проверяю rt.jar для реализации набора деревьев, я замечаю, что в реализации есть ошибка, поскольку TreeSet внутренне использует реализацию, предоставленную TreeMap, и вызывает метод put TreeMap.
В rt.jar код размещения обновляет значение, а не Key, а в TreeSet значение для ключа всегда передается как присутствует.
Пожалуйста, помогите мне понять, есть ли способ добиться обновления в наборе деревьев и правильно ли я понимаю ошибку.
TreeSet
, как указано в цитате из javadoc из моего последнего комментария. - person Sotirios Delimanolis   schedule 29.11.2015