содержит метод () в ArrayList, Java

#java #arraylist #contains

#java #arraylist #содержит

Вопрос:

Я использую ArrayList для сохранения вопросов и ответов на них. ArrayList состоит из класса Answer, в котором есть вопрос No, и ArrayList из answers_marked следующим образом:

 private class Answer {
    private long question_no;
    private ArrayList<long> answer;

    public boolean equals(Object o) {
        if (o instanceof Answer) 
            if (((Answer)o).question_no == this.question_no)
                 return true;
        return false;
    }
}

public ArrayList<Answer> answers = new ArrayList<Answer>();
  

Теперь, когда пользователь меняет свой ответ, я хочу заглянуть в список ответов arraylist и проверить, существует ли вопрос_но в ответах. Если это так, обновите значение ответа, для которого был изменен ответ. Я пытаюсь использовать метод contains, чтобы проверить, существует ли уже вопрос_no, но он всегда возвращает false . Что я здесь делаю не так?
Какая другая структура данных лучше всего подходит для этого?

Я использую answers.contains(новый ответ (10,20)), чтобы узнать, был ли уже дан ответ на вопрос_но 10.

Комментарии:

1. Должно ли это быть ArrayList<Long> ?

2. Я не вижу, где вы использовали contains() . но все же я бы сказал: почему бы не использовать set . И вы должны использовать скобки с if-предложениями. и вы должны определить методы получения / установки.

3. когда пользователь меняет свой ответ, я хочу заглянуть в arraylist ответов и проверить, существует ли уже вопрос_no в answers — у меня серьезные опасения по поводу вашего дизайна..

4. С «long» вместо «Long» он даже не должен компилироваться.

5. contains() отлично работает с вашей equals() реализацией, как вы можете видеть здесь . Ваша проблема должна быть в другом месте.

Ответ №1:

если у вас есть ArrayList, вы не должны этого делать answers.contains(10) — это не сработает .. 10 — это int, и, по вашему equals() , if o не является Answer , тогда вы возвращаетесь false .

Скорее попробуйте:

 Answer answer1 = new Answer(1);
Answer answer2 = new Answer(2);

answers.add(answer1);

answers.contains(answer1) ;//= true
answers.contains(answer2) ;//= false
answers.contains(10) ;//= false
  

Комментарии:

1. Очевидно answers.contains(10) , это была какая-то опечатка, поэтому этот ответ больше не действителен.

2. Я использую answers.contains(новый ответ (10,20)) , чтобы узнать, был ли уже дан ответ на вопрос_но 10