Java TreeSet更新对象值似乎是实现中的一个Bug
我正在检查树集,注意到我无法更新用户定义对象的树集中的值 e、 g 当我打印集合时,它将Emp ID 1的值显示为ABC而不是PQR 当我在rt.jar中检查树集实现时,我注意到实现中似乎有一个bug,因为TreeSet在内部使用TreeMap提供的实现和TreeMap的callput方法 在rt.jar中,put代码更新值而不是Key,在TreeSet中,Key的值始终作为present传递Java TreeSet更新对象值似乎是实现中的一个Bug,java,collections,treeset,Java,Collections,Treeset,我正在检查树集,注意到我无法更新用户定义对象的树集中的值 e、 g 当我打印集合时,它将Emp ID 1的值显示为ABC而不是PQR 当我在rt.jar中检查树集实现时,我注意到实现中似乎有一个bug,因为TreeSet在内部使用TreeMap提供的实现和TreeMap的callput方法 在rt.jar中,put代码更新值而不是Key,在TreeSet中,Key的值始终作为present传递 请帮助我了解是否有任何方法可以实现树集中的更新,以及我对错误的理解是否正确。正如其他人已经解释的那样,
请帮助我了解是否有任何方法可以实现树集中的更新,以及我对错误的理解是否正确。正如其他人已经解释的那样,所描述的行为是预期的,并在类的JDK API描述中明确指定 如果您正在寻找使收藏保持最新的方法,请查看我的实现。这里有几篇文章与同样的问题以及UpdateableTreeSet有关:
如果指定的元素尚未存在,则将其添加到此集合。你对此有何看法?当我将相同ID的emp对象与不同名称的哈希集放在一起时,即使名称的值发生了更改,也要保留旧对象。我如何更新TreeSet中的值这是TreeSet的预期行为,正如我上一条注释中javadoc的引用。如果你想更改集合中的一个元素,您需要先删除,然后添加。是的。这是按照Java的意图工作的,即使它不是您所期望的。
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);
}