为什么EnumMap内部数组是瞬态的

时间:2015-04-03 09:44:34

标签: java enum-map

枚举映射在内部表示为数组。 K [] keyUniverse键数组和Object [] vals数组值。这些阵列是瞬态的。你能告诉我为什么吗?

1 个答案:

答案 0 :(得分:1)

它们是瞬态的,允许以不同(更好)的方式进行序列化。 entrySet也是暂时的。

private void writeObject(java.io.ObjectOutputStream s)
    throws java.io.IOException
{
    // Write out the key type and any hidden stuff
    s.defaultWriteObject();

    // Write out size (number of Mappings)
    s.writeInt(size);

    // Write out keys and values (alternating)
    for (Map.Entry<K,V> e :  entrySet()) {
        s.writeObject(e.getKey());
        s.writeObject(e.getValue());
    }
}

private void readObject(java.io.ObjectInputStream s)
    throws java.io.IOException, ClassNotFoundException
{
    // Read in the key type and any hidden stuff
    s.defaultReadObject();

    keyUniverse = getKeyUniverse(keyType);
    vals = new Object[keyUniverse.length];

    // Read in size (number of Mappings)
    int size = s.readInt();

    // Read the keys and values, and put the mappings in the HashMap
    for (int i = 0; i < size; i++) {
        K key = (K) s.readObject();
        V value = (V) s.readObject();
        put(key, value);
    }
}