Java-检查HashMap的值是否正确复制到ArrayList的测试返回false
我应该写一个方法,以列表的形式返回HashMap的所有值 对于上下文,以下是我正在使用的类。课堂问题是一个类似测验的多项选择题,其多个答案映射在HashMap中,键值为(a),b),c),等等 类Java-检查HashMap的值是否正确复制到ArrayList的测试返回false,java,Java,我应该写一个方法,以列表的形式返回HashMap的所有值 对于上下文,以下是我正在使用的类。课堂问题是一个类似测验的多项选择题,其多个答案映射在HashMap中,键值为(a),b),c),等等 类Answer具有以下接口: public class Answer{ private String answerText= ""; private boolean correct; public Answer(String answerText, boole
Answer
具有以下接口:
public class Answer{
private String answerText= "";
private boolean correct;
public Answer(String answerText, boolean correct) {
this.correct = correct;
this.answerText = answerText;
}
...
public class Question{
private String text;
private double points;
private HashMap<String, Answer> answers= new HashMap<> ();
public void addAnswer(String id, String text, boolean correct)
answers.put(id, new Answer(text, correct));
}
...
类问题
具有以下界面:
public class Answer{
private String answerText= "";
private boolean correct;
public Answer(String answerText, boolean correct) {
this.correct = correct;
this.answerText = answerText;
}
...
public class Question{
private String text;
private double points;
private HashMap<String, Answer> answers= new HashMap<> ();
public void addAnswer(String id, String text, boolean correct)
answers.put(id, new Answer(text, correct));
}
...
下面是我写的实际方法:
public List<Answer> getListAnswers() {
ArrayList<Answer> list = new ArrayList<>();
for(Map.Entry<String, Answer> map : answers.entrySet()) {
Answer o = map.getValue();
list.add(o);
}
return list;
}
公共列表getListAnswers(){
ArrayList=新建ArrayList();
for(Map.Entry映射:answers.entrySet()){
答案o=map.getValue();
列表。添加(o);
}
退货清单;
}
我尝试的
我编写了一个简单的方法,它使用for循环遍历集合,并将HashMap的每个值简单地添加到ArrayList中
但是,测试失败。您的方法听起来不错。
然而,测试断言确实如此
assertTrue(answers.contains(new Answer("first answer", true))
在列表中,javadocs将以下内容写入contains方法
如果此列表包含指定的元素,则返回true。更多
形式上,当且仅当此列表至少包含一个
元素e使得(o==null?e==null:o.equals(e))
因为它们创建了一个新的Answer实例,并且Answer中没有equals实现,所以调用了来自基本对象类的equals。这将返回false,因为basic equals方法比较引用
类对象的equals方法实现了对象上最有区别的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象(x==y的值为true)时,此方法才返回true
如果您在应答中实现并覆盖equals(和hashCode)方法来比较answerText和correct,则测试应该通过
一个快速的equals(由intellij IDEA生成)可能看起来像
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Answer)) return false;
Answer that = (Answer) o;
return correct == that.correct &&
answerText.equals(that.answerText);
}
你的
Answer
类是否实现了equals
和hashCode
@user7可能有什么发现。。。断言检查答案列表是否包含新答案。这将失败,因为它们是不同的实例!我实现了equals
和hashCode
,测试结果出乎意料地(对我来说)为真。@l0ner9检查我的答案,也许这澄清了测试通过的原因