【问题标题】:contains() method in ArrayList, JavaJava ArrayList 中的 contains() 方法
【发布时间】:2014-08-20 20:30:41
【问题描述】:

我正在使用 ArrayList 来保存问题及其答案。 ArrayList 由具有 Question No 的 Answer Class 和 answers_marked 的 ArrayList 组成,如下所示:

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>();

现在,当用户更改他的答案时,我想查看答案数组列表并检查答案中是否已经存在 question_no。如果确实如此,则更新答案已更改的答案值。我正在尝试使用 contains 方法来检查 question_no 是否已经存在,但它总是返回 false。我在这里做错了什么? 哪种其他数据结构最适合执行此操作?

我正在使用 answers.contains(new Answer(10,20)) 来查看 question_no 10 是否已经回答。

【问题讨论】:

  • 应该是ArrayList&lt;Long&gt;
  • 我没有看到你在哪里使用了 contains()。但我还是会说:为什么不使用一套。而且你必须在 if 子句中使用括号。你应该定义getter/setter。
  • 当用户更改他的答案时,我想查看答案数组列表并检查答案中是否已经存在 question_no - 我非常担心您的设计..
  • 使用“long”而不是“Long”,它甚至不应该编译。
  • contains() 与您的equals() 实现配合得很好,如you can see here。您的问题一定出在其他地方。

标签: java arraylist contains


【解决方案1】:

如果你有一个 ArrayList 你不应该做answers.contains(10) - 这不会工作.. 10 是一个 int 并且在你的equals() 中,如果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

【讨论】:

  • answers.contains(10) 显然是某种错字,所以这个答案不再有效。
  • 我正在使用 answers.contains(new Answer(10,20)) 查看 question_no 10 是否已经回答
猜你喜欢
  • 2012-01-09
  • 2013-04-13
  • 2012-11-01
  • 2013-07-06
  • 2020-09-30
  • 1970-01-01
  • 2021-02-01
  • 2015-05-12
相关资源
最近更新 更多