#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