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

时间:2015-11-29 00:51:45

标签: java collections treeset

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

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提供的实现和TreeMap的调用put方法。

在rt.jar中,放置代码更新而不是,在TreeSet中,Key的值始终作为 present <传递/ p>

请帮助我了解是否有任何方法可以在树集中实现更新,以及我对错误的理解是否正确。

1 个答案:

答案 0 :(得分:0)

正如其他人已经解释的那样,所期望的行为是在类TreeSet的JDK API描述中预期和明确指定的。

如果您正在寻找一种方法来更新您的收藏品,请查看我的UpdateableTreeSet实施方案。这里有一些关于同一问题的文章,也涉及UpdateableTreeSet