2

我有以下嵌套的哈希图:

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

有超过一百万个条目,TObjectDoubleHashmap生成大约需要一分钟。我有哪些选项可以将其保存到文件中,这样就不需要每次都生成它?

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

4

2 回答 2

2

有没有更快的方法,例如使用序列化将其保存为对象?

映射的序列化只是写出键和匹配的值。使用序列化不会比自己动手做更快。HashMap对其序列化数据的描述是:

发出HashMap的容量(桶数组的长度)(int),后面是大小(一个int,key-value映射的个数),后面是每个的key(Object)和value(Object)键值映射。键值映射不按特定顺序发出。

您可以在此处查看代码。

我必须做什么才能使我的密钥可序列化?

要使对象可序列化,请实现Serializable接口。您可能还想指定serialVersionUID. 添加一个字段:

private static final long serialVersionUID = 1L;
于 2012-05-28T05:19:07.317 回答
0

您是否使用 a 是Map<Foo1, Map<Foo2, Value>>因为您想为每个值使用两个键?

如果是这样,您可以尝试使用 Guava 的而不是嵌套地图,这可能会提高性能。这是为将两个键关联到一个值而设计的。我的猜测是创建大量的哈希映射是占用大部分初始化时间的原因。

于 2012-05-28T05:48:45.517 回答