Eur*_*Iam 1 java map multimap data-structures
我正在尝试在Java中构建一个数据结构,我将插入大约200,000个字符串键,每个键的"平均值"为1000个整数Map<String, Arraylist<Integer>>.该地图最终将拥有大约2亿的价值.
问题是插入时,我必须首先检查键是否存在于映射中,如果为true,则获取存储在临时集合中的所有值,然后将新整数添加到集合中并将它们放回映射,或实例化带有新整数的新集合.
当我到达集合包含大约50000个整数的点时,这是非常慢的.我通常从堆空间错误中得到一个java.
有没有办法摆脱获取过程?在这里我只检查为重点的存在,然后立即值类似豪华添加到已有的集合,堆栈,尤其是因为地图是在内存中,或者是什么使++用C Java和C之间的差异,其中++我可以使用指针受益吗?
保持这样一个事实,我不喜欢通过使用像multimaps这样的东西来增加地图的大小,因为结构看起来几乎是直截了当的.
提前谢谢了.
如果您的代码实际上正在执行您的问题所暗示的内容,那么您的工作就太难了 一旦你的Key与ArrayList相关联.只需将ArrayList从地图中取出,然后将新整数添加到该列表中.你不需要"放回去".只需更改List即可引用List.
Map<String, ArrayList<Integer>> m = new HashMap<String, ArrayList<Integer>>();
for ( int i = 0; i < 5; i++ ) {
String key = ( i % 2 == 0 ) ? "Bob" : "Robert";
ArrayList<Integer> l = m.get( key );
if ( l == null ) {
l = new ArrayList<Integer>();
m.put( key, l );
}
l.add( i );
}
System.out.println( "m is " + m );
Run Code Online (Sandbox Code Playgroud)
在我看来,Guava Multimap是解决这个问题的更好的解决方案:http: //guava-libraries.googlecode.com/svn/tags/release03/javadoc/com/google/common/collect/Multimap.html