Java 为问答组实现哈希表

Java 为问答组实现哈希表,java,dictionary,hashtable,Java,Dictionary,Hashtable,实现哈希表(或使用更好的方法)以存储问题列表及其相关答案(每个问题一个可能的答案)的最简单方法是什么 最初,我创建了一个ArrayList来存储问题。我本可以为答案制作第二个ArrayList,但一旦我有很多问题,尝试将问题和答案匹配起来就会变得复杂 有人可以发布一个快速代码示例吗?谢谢 您希望钥匙是什么?如果每个问题只有一个可能的答案,并且在某些情况下可能没有答案,那么这听起来是在问题类中有答案参考的理想理由。那就列一张问题清单 如果这不符合某些特定要求,请提供更多有关您正在尝试执行的操作的信

实现哈希表(或使用更好的方法)以存储问题列表及其相关答案(每个问题一个可能的答案)的最简单方法是什么

最初,我创建了一个ArrayList来存储问题。我本可以为答案制作第二个ArrayList,但一旦我有很多问题,尝试将问题和答案匹配起来就会变得复杂


有人可以发布一个快速代码示例吗?谢谢

您希望钥匙是什么?如果每个问题只有一个可能的答案,并且在某些情况下可能没有答案,那么这听起来是在
问题
类中有
答案
参考的理想理由。那就列一张问题清单

如果这不符合某些特定要求,请提供更多有关您正在尝试执行的操作的信息。(例如,您可能需要从一个答案导航到一个问题……在这种情况下,您可以将答案的引用返回到对象中的问题……就循环引用而言,这有点混乱,并且不适用于不可变的类型,但这并不是完全不合理的。)


与简单的地图相比,更喜欢有问题列表的一个原因是,问题往往以某种方式自然有序——而地图通常是天生无序的。但我们需要更多地了解您的实际情况,以确定这是否相关。

哈希映射是一个完美的选择,但我建议您更进一步

Java是一种面向对象的语言。为什么不创建一个问卷摘要

public class Questionnaire
{
    private Map<String, String> questionsAndAnswers = new HashMap<String, String>();

    // more follows.

}
公共课堂调查问卷
{
私有映射questionsAndAnswers=新建HashMap();
//接下来还有更多。
}

对于这个简单的1:1映射,您不一定需要复杂的HashMap。一个由一个问题及其相关答案组成的简单类就足够了:

public class Question {
   final private String text;
   final private String answer;
   public Question(String text, String answer) {
     this.text= text;
     this.answer = answer;
   }

   public String getText() { return text; }
   public String getAnswer() { return answer; }
   public String toString() { return text + " - " + answer; }
}
然后,在代码的后面,您可以创建一个包含所有问题的列表:

   List<Question> questionnaire = new ArrayList<Question>();
   questionnaire.add(new Question("1+1?", "2"));
   System.out.println("Question 1: " + questionnaire.get(0).getText());
列表调查问卷=新建ArrayList();
添加(新问题(“1+1?”,“2”);
System.out.println(“问题1:+问卷.get(0.getText());

实现Map接口(
java.util.Map
)的任何类都可以满足您的基本需求

然而,在选择实施方案时,必须考虑哪些操作要优化: {插入删除随机存取顺序存取}

如果您只需要随机访问每个问题(和答案),那么
HashMap
可能是您的最佳选择

类似字典的应用程序最常见的用例是列出一系列条目。因此,如果您要显示一系列问题(和答案),请考虑使用<代码> HashMap < /代码>的变体,<强> >代码> LinkedHashMap <代码> <强> > /p> 您的基本哈希表功能由
HashMap
提供,它将产生O(1)个查找复杂度,但是显示“系列”或“列表”所需的迭代可能非常昂贵


在这种情况下,
LinkedHashMap
最能满足您的需求,因为它提供了一个附加到底层哈希表的链接列表;因此,迭代或顺序访问变得便宜。但是,这种方法的折衷之处在于,增加和删除新条目(问题)的成本更高。

Java有一个
HashMap
类,该类实现键/值关联。即使您决定使用两个
ArrayList
,也很容易将问题与答案匹配:对于每个
问题。get(i)
有一个相关的
答案。获取(i)
(可能为
null
)。如果要获取与问题匹配的答案,则为True,但如果要添加一组问题,则必须确保以相同的顺序输入问题和答案,如果要编辑问题/答案对,这也更难。如果在构造
问题
后不修改它们,则应将
文本
答案
设置为最终。