【发布时间】:2013-09-06 14:20:42
【问题描述】:
我正在开发一个小项目,一个 Web 应用程序,我在其中根据用户文本输入对数据进行一些分析。
为此,我需要使用一个地图,其中有单词和该单词的相应分数。
这是我尝试过的:
public class EnDict {
private static Map<String, Integer> map = new HashMap<String, Integer>() {
{
put("abandon", -2);
put("ability", 2);
put("abuse", -3);
//and so on, thousands of pairs
}
}
}
它有效,但这样我需要在我的类中硬编码键/值对。所以,如果我想添加更多对,我必须编写代码,而不是仅仅添加对做一个文本文件。好像不太好。
所以我想从文本文件中获取这对。此外,我需要在应用程序启动时创建此 Map,因此当任何用户发出请求时,该 Map 已经加载,并且可供分析逻辑使用。我的意思是,Map 必须在第一个请求发生之前在内存中,并且在那之后最后在内存中,以便在后续请求中使用。并且它需要在我的应用程序的任何地方都可见(可能这部分不是很清楚,但我不知道如何更好地解释它)。
我已经尝试了一些研究,但是自从应用程序启动以来,我还没有找到将地图保存在内存中的特定部分的答案。它类似于 ASP.NET 的 Application_Start 方法,在 Global 类中。
我对编程非常陌生,尤其是对 Java 非常陌生,所以我可能完全误导了如何以最佳方式完成这项任务。如果是这种情况,我们将不胜感激。
我正在使用 Servlet、JSP 和 Tomcat。
编辑: 实际上,它不会只有一张地图。会有几个 Map,这些 Map 可以有一些相同的键。
【问题讨论】:
-
也许Properties 并实现
Singleton模式来访问这些属性? -
@dic19 我看到
Properties类的唯一问题是它不允许添加空值。但如果你没有 null 值,这不是问题。 -
@Mauren 同意了。你是对的。
-
看看我在问题末尾的编辑。我需要有几个不同的地图(每种语言一个),并且我需要有可能在不同的地图中拥有相同的键,具有不同的值。据我所知,属性并不能解决问题,是吗?
-
另外,由于
Properties只存储字符串,而且我需要将值转换为int来执行计算,每次执行转换不会是某种开销吗?
标签: java