我有以下嵌套的hashmap:
HashMap<Foo1, HashMap<Foo2, TObjectDoubleHashMap<Foo1>>> my_map;
TObjectDoubleHashmap
中有超过一百万个条目,生成大约需要一分钟。我有什么选择将它保存到文件中,因此不需要每次都生成它?
到目前为止,我已将实际的键和值保存到文本文件中,然后再次将其加载到hashmap中,但这并没有节省那么多时间。是否有更快的方法,例如使用序列化将其保存为对象?如果是这样,我需要做些什么来使我的密钥可序列化?
答案 0 :(得分:2)
是否有更快的方法,例如使用序列化将其另存为对象?
地图的序列化仅仅是写出键和匹配值。使用序列化并不比自己做得更快更快。 HashMap对其序列化数据的描述是:
HashMap的容量(长度为 bucket array)是发出(int),然后是 size(一个int,键值的数量 映射),后跟键(Object)和值(Object) 对于每个键值映射。键值映射是 没有特别的顺序发出。
您可以看到代码here。
如何使我的密钥可序列化?
要使对象可序列化,请实现Serializable
接口。您可能还想指定serialVersionUID
。添加字段:
private static final long serialVersionUID = 1L;
答案 1 :(得分:0)
您使用的是Map<Foo1, Map<Foo2, Value>>
,因为您想为每个值使用两个键吗?
如果是这样,您可以尝试使用Guava的Table而不是嵌套地图,这可能会提高性能。这用于将两个键与值相关联。我的猜测是创建大量的哈希映射是占用大部分初始化时间的原因。