我有一个键列表和相应的值,大约有150个条目。我有一个方法,每个会话将多次访问它,但永远不会编辑它。会议期间保持不变。我认为因为我想快速访问这些值,我会使用一个hashmap,但我不确定如何长期存储它。存储它的最佳方法是什么,然后在程序开始时访问它。谢谢!
答案 0 :(得分:1)
从不从不?在这种情况下,您应该考虑在程序的jar中构建属性(或JSON等)文件。然后你可以使用
new Properties(getClass().getResourceAsStream());
来自与属性文件相同的包级别的任何类,以获取键值对的集合。
如果事实上它可能会偶尔发生变化,您可能需要考虑某种外部数据存储,正如我在回答您的问题的评论中已经提到的那样。
答案 1 :(得分:1)
如果它实际上从不要改变,你也可以将它存储在静态初始化类中:public static final
。如果我们假设永远不会改变,那么没有理由通过其他技术(例如从文件或数据库加载)轻松更改。
是否将它存储为具有150个条目的HashMap或类中的150个字段取决于您。我认为这取决于您希望如何访问数据。如果将它存储为HashMap,那么您可能正在访问String键上的值,例如Constants.getData("max.search.results")
。如果您将其存储为150个字段,则只需直接访问字段,例如Constants.MAX_SEARCH_RESULTS
。
至于性能,除了您的数据很大外,您无需担心150个条目。人们经常使用HashMaps进行数千或数百万条目。
至于何时初始化,Java中的static
字段仅在应用程序启动时初始化一次。对于150个条目,这应该花费不到一毫秒(球场估计)。
答案 2 :(得分:0)
好像你可以硬编码,例如用地图字符串 - >字符串:
public final class CONST
{
public static final Map<String, String> DATA;
static
{
final Map<String, String> data = new HashMap<>(200);
data.put("key001", "value001");
// ...
data.put("key150", "value150");
DATA = Collections.unmodifiableMap(data);
}
}
这会在加载类时创建哈希表。如果您出于某种原因想要避免这种情况,您也可以使用initialization-on-demand holder idiom