Java 为问答组实现哈希表
实现哈希表(或使用更好的方法)以存储问题列表及其相关答案(每个问题一个可能的答案)的最简单方法是什么 最初,我创建了一个ArrayList来存储问题。我本可以为答案制作第二个ArrayList,但一旦我有很多问题,尝试将问题和答案匹配起来就会变得复杂Java 为问答组实现哈希表,java,dictionary,hashtable,Java,Dictionary,Hashtable,实现哈希表(或使用更好的方法)以存储问题列表及其相关答案(每个问题一个可能的答案)的最简单方法是什么 最初,我创建了一个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,但如果要添加一组问题,则必须确保以相同的顺序输入问题和答案,如果要编辑问题/答案对,这也更难。如果在构造问题
后不修改它们,则应将文本
和答案
设置为最终。