Java:从文件中保存和读取哈希映射

时间:2012-05-28 05:16:28

标签: java hashmap

我有以下嵌套的hashmap:

HashMap<Foo1, HashMap<Foo2, TObjectDoubleHashMap<Foo1>>> my_map;

TObjectDoubleHashmap中有超过一百万个条目,生成大约需要一分钟。我有什么选择将它保存到文件中,因此不需要每次都生成它?

到目前为止,我已将实际的键和值保存到文本文件中,然后再次将其加载到hashmap中,但这并没有节省那么多时间。是否有更快的方法,例如使用序列化将其保存为对象?如果是这样,我需要做些什么来使我的密钥可序列化?

2 个答案:

答案 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而不是嵌套地图,这可能会提高性能。这用于将两个键与值相关联。我的猜测是创建大量的哈希映射是占用大部分初始化时间的原因。