TreeSet用新值替换旧值

时间:2018-09-21 08:53:38

标签: java treeset

我正在尝试在TreeSet中插入多个对象。问题是一个对象可以很好地插入,但是当我插入第二个对象并尝试查看两个对象时,我两次获得了第二个对象。如何防止我的旧价值观被替换。

这是我的POJO

    public Class Question implements Comparable<Question>
    {
     .....
     public int compareTo(Question q) {
    if(vote>q.vote)
        return -1;
    else
        return 1;
}

这是将对象插入treeSet的函数

public void save(String ques, String sessionId, Question question)
{
question.setQuesId(++quesId);                  
question.setQues(ques);
question.setSessionId(sessionId);
question.setVote(0);
setDemo.add(Question);
}

注意:“ setDemo”是我的treeSet对象

任何建议都值得赞赏。 谢谢

1 个答案:

答案 0 :(得分:1)

首先,您的比较者应处理票数相等的情况。

public int compareTo(Question q) {
    if(vote>q.vote) {
        return -1;
    } else if (vote<q.vote){
        return 1;
    } else {
        return 0;
    }
}

第二,请确保在equals中正确覆盖Question

如果两个compareTo方法都返回0,而equals返回true,则TreeSet将覆盖您的值,因为它将两个值都检测为重复值。否则,您将无法获得任何替代品。

尽管TreeSet在内部未使用hashCode,但我还是建议您覆盖它,因为将来您可能希望将实现从TreeSet更改为HashSet