TreeSet 用新值替换旧值

TreeSet replacing old values by New values

我正在尝试在 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对象

如有任何建议,我们将不胜感激。 谢谢

首先,你的比较器应该处理票数相等的情况。

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

其次,确保在 Question 中正确覆盖 equals

如果 compareTo 方法 returns 0 和 equals returns 都为真,TreeSet 将覆盖您的值,因为它将检测到这两个值是重复的。否则,您不应该获得任何替代品。

虽然 TreeSet 在内部不使用 hashCode,但我建议也覆盖它,因为您可能希望将实现从 TreeSet 更改为 HashSet未来。