src/main/java/org/jivesoftware/smack/util/collections/AbstractHashedMap.java
protected void doWriteObject(ObjectOutputStream out) throws IOException {
        out.writeFloat(loadFactor);
        out.writeInt(data.length);
        out.writeInt(size);
        for (MapIterator it = mapIterator(); it.hasNext();) {
            out.writeObject(it.next());
            out.writeObject(it.getValue());
        }
    }
protected void doWriteObject(ObjectOutputStream out) throws IOException {
        out.writeFloat(loadFactor);
        out.writeInt(data.length);
        out.writeInt(size);
        for (MapIterator it = mapIterator(); it.hasNext();) {
            out.writeObject(it.next());
            out.writeObject(it.getValue());
        }
    }
Writes the map data to the stream. This method must be overridden if a
subclass must be setup before <code>put()</code> is used.
<p/>
Serialization is not one of the JDK's nicest topics. Normal serialization
will initialise the superclass before the subclass. Sometimes however,
this isn't what you want, as in this case the <code>put()</code> method
on read can be affected by subclass state.
<p/>
The solution adopted here is to serialize the state data of this class in
this protected method. This method must be called by the
<code>writeObject()</code> of the first serializable subclass.
<p/>
Subclasses may override if they have a specific field that must be
present on read before this implementation will work. Generally, the read
determines what must be serialized here, if anything.

@param out
the output stream