我需要在地图中存储一个巨大的数据用于反转索引,但我的数据非常庞大,我看到随着地图变得越来越大,它变得越来越慢。我们正在谈论一个具有非常稀疏索引的Map容器,其容量为1到10亿。
在我的程序的一次迭代中,将计算一些数字,以获得要存储的许多关键值(可能是数千个) - 这意味着在每次迭代中,Map的大小将增加大约数千个左右我发现在前几次迭代中,需要20秒左右,但是在第70次迭代时,需要100秒左右。我有大约5000组数据 - 我需要5000次迭代才能获得所有这些数据。随着每次迭代的指数级增长,计算需要数天,这是不可接受的。
在这种情况下我能做些什么吗?
答案 0 :(得分:0)
您可以尝试使用java HashMap实现。每次Matlab访问java例程时都会有一个smkall开销,但Java例程通常提供更多的灵活性。例如:
%Create
map = java.util.HashMap(5e6); %Initialize with room for 5 million entries
%Add data
map.put('key1','value1');
map.put(2,20);
%get data
out = map.get('key1'); %Get a value
map.containsKey(2); %Check for existance of a key
这会奏效。但是......目前尚不清楚它是否会更快。只有一项测试才能证明。
此外,当您以这种方式开发时,您可能偶尔会遇到错误。
Java exception occurred:
java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap.<init>(Unknown Source)
at java.util.HashMap.<init>(Unknown Source)
发生这种情况时,您可以使用clear java
清除任何Java驻留信息,或者为初始HashMap分配更少的空间。