protected void doReadObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
        loadFactor = in.readFloat();
        int capacity = in.readInt();
        int size = in.readInt();
        init();
        data = new HashEntry[capacity];
        for (int i = 0; i < size; i++) {
            K key = (K) in.readObject();
            V value = (V) in.readObject();
            put(key, value);
        }
        threshold = calculateThreshold(data.length, loadFactor);
    }
Reads the map data from 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 deserialize the state data of this class in
this protected method. This method must be called by the
<code>readObject()</code> of the first serializable subclass.
<p/>
Subclasses may override if the subclass has a specific field that must be present
before <code>put()</code> or <code>calculateThreshold()</code> will work correctly.

@param in the input stream
jphp-runtime/src/php/runtime/common/collections/map/AbstractHashedMap.java