Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java TreeSet更新对象值似乎是实现中的一个Bug_Java_Collections_Treeset - Fatal编程技术网

Java TreeSet更新对象值似乎是实现中的一个Bug

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传递 请帮助我了解是否有任何方法可以实现树集中的更新,以及我对错误的理解是否正确。正如其他人已经解释的那样,

我正在检查树集,注意到我无法更新用户定义对象的树集中的值

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);
}