我使用hashmap结构来存储父文档(Key)和所有相关子文档(Value)与该父文档的列表之间的映射。这需要稍后迭代以处理映射。密钥以及List中的每个值通常是75-100个字符长的文件名。这样可以正常工作,但是有50000个父文档,每个文档都有50-100个子文档。所以这会在内存中产生巨大的对象负载。有没有更好的方法以有效的内存方式存储此映射?
Map<String, List<String>> docmap=new HashMap<String,List<String>>();
答案 0 :(得分:1)
这应该更节省内存,因为它不会浪费内存用于存储桶管理:
String [][] array = new String [50000][]; // parents
array[1] = new String[100]; // children for parent 1
答案 1 :(得分:1)
你的结构并不低效,没有必要寻找更好的东西。
我计算出你的字符串所使用的空间可能大约为650MB,忽略了哈希映射和列表的开销。
我不知道dir
或cd
的开销,但与子列表的大小相比,它不会那么多。即使每个列表和哈希条目每个花费20个字节,也只有2MB - 海洋中的一滴。
所以你的问题不是哈希映射或列表 - 它是你的原始数据。
如果650MB太多而无法存储在内存中(这些日子并不多),那么您唯一的选择就是将其存储在数据库中。