TreeSet заменяет старые значения новыми значениями - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь вставить несколько объектов в 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

Любые советы приветствуются.Thankyou

1 Ответ

0 голосов
/ 21 сентября 2018

Прежде всего, ваш компаратор должен обработать случай, когда голоса равны.

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 в будущем.

...