内存高效的字符串映射到列表<string>

时间:2015-11-08 15:21:24

标签: java hashmap

我使用hashmap结构来存储父文档(Key)和所有相关子文档(Value)与该父文档的列表之间的映射。这需要稍后迭代以处理映射。密钥以及List中的每个值通常是75-100个字符长的文件名。这样可以正常工作,但是有50000个父文档,每个文档都有50-100个子文档。所以这会在内存中产生巨大的对象负载。有没有更好的方法以有效的内存方式存储此映射?

Map<String, List<String>> docmap=new HashMap<String,List<String>>();

2 个答案:

答案 0 :(得分:1)

这应该更节省内存,因为它不会浪费内存用于存储桶管理:

        String [][] array = new String [50000][]; // parents
        array[1] = new String[100]; // children for parent 1

答案 1 :(得分:1)

你的结构并不低效,没有必要寻找更好的东西。

我计算出你的字符串所使用的空间可能大约为650MB,忽略了哈希映射和列表的开销。

我不知道dircd的开销,但与子列表的大小相比,它不会那么多。即使每个列表和哈希条目每个花费20个字节,也只有2MB - 海洋中的一滴。

所以你的问题不是哈希映射或列表 - 它是你的原始数据。

如果650MB太多而无法存储在内存中(这些日子并不多),那么您唯一的选择就是将其存储在数据库中。