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.
}