java哈希映射可序列化性
HashMap实现了可序列化接口;所以它可以被序列化。我已经研究了HashMap的实现,条目[]表被标记为transient。由于条目[]表是存储映射的全部内容的表,如果无法序列化,那么在反序列化期间映射是如何构造的
你可以在下面搜索框中键入要查询的问题!
HashMap实现了可序列化接口;所以它可以被序列化。我已经研究了HashMap的实现,条目[]表被标记为transient。由于条目[]表是存储映射的全部内容的表,如果无法序列化,那么在反序列化期间映射是如何构造的
# 1 楼答案
哈希映射在序列化期间不会序列化其条目对象。看看它的
writeObject
方法javadocs解释道:
如果查看
readObject
方法,您将看到如何使用大小、键和值重建条目表# 2 楼答案
如果查看the source,您将看到它不依赖默认的序列化机制,而是手动写出所有条目(作为键和值的交替流):
这比数组更紧凑,因为数组可以包含许多空条目和链接链,以及Map$Entry包装器的开销
注意,它仍然为“easy”字段调用
defaultWriteObject
。为了让它工作,它必须将所有其他内容标记为transient
# 3 楼答案
HashMap
通过使用writeObject
和readObject
方法来处理自己的序列化