如果您查看源代码,将会看到它不依赖默认的序列化机制,而是手动写出所有条目(作为键和值的交替流):
private void writeObject(java.io.ObjectOutputStream s) throws IOException { Iterator<Map.Entry<K,V>> i = (size > 0) ? entrySet0().iterator() : null; // Write out the threshold, loadfactor, and any hidden stuff s.defaultWriteObject(); // Write out number of buckets s.writeInt(table.length); // Write out size (number of Mappings) s.writeInt(size); // Write out keys and values (alternating) if (i != null) { while (i.hasNext()) { Map.Entry<K,V> e = i.next(); s.writeObject(e.getKey()); s.writeObject(e.getValue()); } } }这比数组要紧凑,数组可以包含许多空条目,链接链和Map $ Entry包装器的开销。
注意,它仍然
defaultWriteObject为“ easy”字段调用。为了使其正常工作,它必须将其他所有内容都标记为
transient。



