2013-05-03 55 views
1

我有地图:分配值,以地图(哈希映射或Multimap之)

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]} 

我最近切换到番石榴,我能做到这一点Multimap之呢?我想分配的值现在是一个字符串,因此分配可能比我想象的要复杂得多。

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

编辑2: 我现在有将近50k对,因此单独添加不是一个选项。 5月,为了发展,我可以将列表修剪为100个项目,但这也涉及到每个项目的劳动力。

编辑3: 据我所知,我们可以通过某种方式或其他方式来设置数据库,以便更快地执行。我只需要弄清楚是否可以分配?否则,我要进行本地设置。

+0

你必须显示如何从数据库服务器获取数据 – 2013-05-03 12:52:03

+0

这是你的数据库吗?只要你有一个体面的互联网连接(可能10-20秒),检索50K行数据不应该花很长时间。我怀疑它不是网络延迟,而是数据库的问题。发布查询并评论您是否在表上有适当的索引(因此您没有进行全表扫描)。运行解释计划并查看。在浪费时间实施您可能不需要的解决方案之前,先解决此问题。 – CBass 2013-05-03 12:58:46

回答

2

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

此刻我有近5万双,因此单独添加并不是一种选择。

而且,如果您编写代码生成器,无论它是生成内联初始化程序还是加载Map#put()语句都无关紧要。

但是,无论如何,在这种情况下,代码中的代码生成/初始化当然是不好的选择。更好的解决方案将(按降低有用性排序):

  • 照顾您的数据库设置缓慢或未优化的查询(请参阅CBass对原始问题的评论)。
  • 小心只加载一次数据,使延迟与整个图片的关联性降低。
  • 从数据库服务器读取一次,然后将其序列化为文件(请参阅ObjectOutputStream),然后从该文件中反序列化该文件。
  • 您可以设置本地(快速)数据库服务器,并从中读取而不是远程数据库服务器。

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

+0

雅,我考虑过这一次。但我必须弄清楚是否有可能? – akshayb 2013-05-03 13:00:12

+0

@akshayb:问题不是“是否可能”。它是。真正的问题是“这是一个很好的解决方案”。这不能用你在这里给出的信息来回答。即使无视你的意思与“它”:) – creinig 2013-05-03 13:03:06

+0

啊,再次我的错误提问方式错误。请检查,只是编辑。 – akshayb 2013-05-03 13:06:27