存储每个会话所需的数据的最佳方式,但永远不会改变

时间:2016-06-14 18:46:29

标签: java data-structures storage

我有一个键列表和相应的值,大约有150个条目。我有一个方法,每个会话将多次访问它,但永远不会编辑它。会议期间保持不变。我认为因为我想快速访问这些值,我会使用一个hashmap,但我不确定如何长期存储它。存储它的最佳方法是什么,然后在程序开始时访问它。谢谢!

3 个答案:

答案 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