1

我有一张地图:

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

从远程数据库服务器检索数据后,我正在创建一个哈希图:(在 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]}

我最近切换到 Guava,我也可以做这个 Multimap 吗?我要分配的值现在是一个字符串,因此分配可能比我想象的要复杂得多。

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

编辑 2:此时我有近 50k 对,因此单独添加不是一种选择。5月,为了发展,我可以将清单裁减到100个,但这太费力了。

编辑3:我知道我们可以想办法更完美地设置数据库以便快速执行。我只需要弄清楚是否可以分配?否则,我将进行本地设置。

4

1 回答 1

2

s 的内联初始化Map在 Java 中是不可能的。但是,在您的情况下,这并不重要-通过代码填充 Map 的大量数据意味着数小时(或数天)的高度重复且极易出错的手动输入或编写代码生成器:

目前我有近 50k 双,因此不能单独添加。

而且,如果您仍然编写代码生成器,那么它是否生成内联初始化程序或大量Map#put()语句都没有关系。

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

  • 照顾您缓慢的数据库设置或未优化的查询(请参阅 CBass 对原始问题的评论)。
  • 注意只加载该数据一次,使延迟与全局无关。
  • 从 DB 服务器读取一次,然后将其序列化为文件(请参阅ObjectOutputStream参考资料),然后从那里反序列化。
  • 您可以设置一个本地(快速)数据库服务器并从中读取而不是远程读取。

我什至不会考虑在代码中初始化这种大小的数据结构,除非上述所有事情都被证明不起作用。这是极不可能的。

于 2013-05-03T12:58:40.863 回答