为Map分配值(Hashmap或Multimap)

时间:2013-05-03 12:23:44

标签: java hashmap guava

我有一张地图:

HashMap<String, ArrayList<Integer>> hashmap = new HashMap<String, ArrayList<Integer>>();

从远程数据库服务器检索数据后,我正在创建一个hashmap :(在eclipse中输出)

{newcomer=[23, 78, 118, 155, 240, 244], zoom=[213], profession=[8, 10, 12, 13, 15]}

现在,我担心的是,连接服务器和下载数据需要花费太多时间。数据大小超出了我的耐心。有什么办法,我可以直接在Hashmap变量中存储值(就像我们使用普通变量,int i = 5);

一般来说,我该怎么做(就像我在Python中一样):

hashmap = {newcomer=[23, 78, 118, 155, 240, 244], zoom=[213], profession=[8, 10, 12, 13, 15]}

我最近切换到了番石榴,我也可以使用Multimap吗?我想分配的值现在是一个字符串,因此分配可能比我想的要复杂得多。

修改1 : 我只需要这个用于开发目的。应用程序启动后,将重新连接到数据库服务器。

编辑2 : 此时我有近5万对,因此单独添加不是一种选择。 5月,为了开发,我可以将列表修改为100个项目,但这也需要劳动力来放置每个项目。

编辑3 : 我知道我们可以想办法或者更好地设置数据库以便快速执行。我只需要弄清楚是否可以分配?另外,我要去当地设置。

1 个答案:

答案 0 :(得分:2)

Java中无法对Map进行内联初始化。在你的情况下,这并不重要 - 因为你通过代码填充Map的数据大概意味着高度重复和极易出错的手动输入或编写代码生成器的小时(或天):

  

此时我有近5万对,因此单独添加不是一种选择。

如果你编写代码生成器,那么它是否生成内联初始值设定项或Map#put()语句的载荷并不重要。

然而,无论如何,代码生成/初始化在这种情况下肯定是一个糟糕的选择。更好的解决方案(按降低有用性排序):

  • 请注意您的慢速数据库设置或未经优化的查询(请参阅CBass对原始问题的评论)。
  • 注意只加载一次数据,使延迟与整体情况不太相关。
  • 从数据库服务器读取一次,然后将其序列化为文件(请参阅ObjectOutputStream),然后从那里反序列化。
  • 您可以设置本地(快速)数据库服务器并从中读取而不是远程数据库服务器。

我甚至不会想到在代码中初始化这个大小的数据结构,除非上面所有的事情都显示不起作用。这是极不可能的。