Java 更有效的存储值的方法?
我在考虑做一个数学程序。它将从一组问题中随机提问,然后验证答案。以下是我到目前为止的情况:Java 更有效的存储值的方法?,java,store,Java,Store,我在考虑做一个数学程序。它将从一组问题中随机提问,然后验证答案。以下是我到目前为止的情况: String[] questions = {"3 * 19", "21 * 9", "7 * 4", "349274 * 0", "16 / 2", "3 + 86", "5 - 9"}; int[] answers = {57, 189, 28, 0, 8, 89, -4}; (它通常不是这样间隔的;我这样做
String[] questions = {"3 * 19", "21 * 9", "7 * 4", "349274 * 0", "16 / 2", "3 + 86", "5 - 9"};
int[] answers = {57, 189, 28, 0, 8, 89, -4};
(它通常不是这样间隔的;我这样做只是为了显示哪些答案与哪个问题相符)
有没有更有效的方法来实现这一点(我只对存储数据感兴趣,而不是检索数据)?应该这样做:
Map<String,Integer> map = new HashMap<String, Integer>(){{
put("3 * 19", 57);
put("21 * 9", 189);
put("7 * 4", 28);
put("349274 * 0", 0);
put("16 / 2", 8);
put("3 + 86", 89);
put("5 - 9", -4);
}};
我的建议是创建一个专用类来存储问题和答案,将它们存储在
列表中
,并使用它来洗牌问题
与依赖于HashMap
内部存储问题的顺序(对于给定的JVM实现,这很可能是相同的)相比,使用shuffle
在应用程序每次运行时提供更为均匀的问题分布
此外,从面向对象的角度来看,将问题和答案封装在一起更好
public class Question {
private final String question;
private final int answer;
public Question(String question, int answer) {
this.question = question;
this.answer = answer;
}
public String getQuestion() { return question; }
public int getAnswer() { return answer; }
}
然后填充问题列表,洗牌并迭代:
// Use ArrayList as it supports random access for efficient element swapping:
List<Question> questions = new ArrayList<Question>();
questions.add(new Question("3 * 19", 57));
// etc.
Collections.shuffle(questions);
for (Question qn : questions) {
System.out.println(qn.getQuestion());
// Prompt for answer, etc.
}
//使用ArrayList,因为它支持随机访问以实现高效的元素交换:
列出问题=新建ArrayList();
添加(新问题(“3*19”,57));
//等等。
收集。洗牌(问题);
(问题qn:问题){
System.out.println(qn.getQuestion());
//提示回答等。
}
您现在如何存储它?你在看什么效率低下?磁盘空间?序列化时间?还有别的事吗?为什么我不能投票????谢谢你!这看起来效率更高!:D我会尽快接受!请注意,这将创建一个从HashMap继承的匿名内部类。因此,它对创建它的类的实例有一个(非瞬态)引用,如果您尝试序列化映射,这可能会带来问题。@Tony:这不是更有效的方法。老实说,你的问题不是很清楚,但既然你似乎在问什么更节省空间,那么你最初的问题就更清楚了。你将如何从地图上随机选择问题?@Adamski Tony只对检索值感兴趣。
// Use ArrayList as it supports random access for efficient element swapping:
List<Question> questions = new ArrayList<Question>();
questions.add(new Question("3 * 19", 57));
// etc.
Collections.shuffle(questions);
for (Question qn : questions) {
System.out.println(qn.getQuestion());
// Prompt for answer, etc.
}