枚舉映射在內部表示爲數組。 K [] keyUniverse鍵和Object [] vals數組數組。這些陣列是瞬態的。你能告訴我爲什麼嗎?爲什麼EnumMap內部數組是瞬態的
回答
它們是暫時的,以允許以不同(更好)方式進行序列化。另外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);
}
}
哦。我明白了,謝謝! =) – xCroNic 2015-04-03 10:09:42
不知道它是否100%正確。注意到這些字段的「(Cached for performance。)」評論?通常情況下,序列化重複信息根本沒有意義,所以我想這可能是原因:它們可以從非瞬態字段計算。 – Marvin 2015-04-03 10:13:44
@Marvin,EnumMap沒有其他數據字段。 keyUniverse只是相關Enum的所有Enum值的一個數組。它可以隨時從Enum中讀取,但是字段更快。我認爲這個評論「(Cached for performance。)」意思是這個 – xCroNic 2015-04-03 10:22:11
- 1. 瞬態變量的用途是什麼?
- 2. P&P RetryPolicy,什麼是瞬態異常
- 3. 爲什麼ArrayList使用瞬態存儲?
- 4. 什麼存儲類是一個函數內部的靜態,爲什麼?
- 5. 爲什麼沒有偷看!函數爲clojure瞬態矢量?
- 6. 什麼是動態數組X的Delphi動態數組的內存佈局?
- 7. 爲什麼EnumMap構造函數需要類參數?
- 8. 爲什麼EnumMap的構造函數中需要enum.class?
- 9. 爲什麼TriggerAction是內部的?
- 10. 函數內部聲明的靜態變量的值是什麼?
- 11. 什麼「瞬態異常」由ServiceProxy處理?
- 12. 什麼是PHP中的數組內部指針?
- 13. 什麼是Ruby on Rails中的瞬態屬性?
- 14. 什麼是靜態內部類的Eclipse外部註釋格式?
- 15. 爲什麼HashSet實現中的HashMap瞬態?
- 16. 爲什麼原始數組的多態類型是危險的
- 17. 爲什麼EnumMap爲空值分配Object類對象?
- 18. 內部是什麼NSString?
- 19. iOS:XIB內部是什麼?
- 20. 什麼是unix/linux內部?
- 21. 什麼是RequestCacheLevel.BypassCache內部?
- 22. 爲JPA創建一個字段瞬態,但JPA不是瞬態的
- 23. 是什麼導致瞬態aspx第一行編譯錯誤?
- 24. 爲什麼內部程序?
- 25. 更新瞬態而不是在wordpress中插入新的瞬態
- 26. 爲什麼我們需要瞬態故障處理存儲?
- 27. 爲什麼JPA瞬態註釋在Target中有方法?
- 28. AS3:爲什麼「this」會在函數內部改變它指的是什麼?
- 29. 爲什麼動態數組總是翻倍的2倍?
- 30. 爲什麼它是數組的元素?
使用HashMap,檢查枚舉鍵是比理想慢。它不針對枚舉進行優化。 – Prashant 2015-04-03 09:49:47
@Prashant與這個問題無關 - 這就是爲什麼'EnumMap'首先存在的原因。 – 2015-04-03 09:54:25
@AndyTurner:我明白你的觀點,但性能是內部使用數組的主要原因。你可以看看'有效的java by Joshua bloch中的Item 33' – Prashant 2015-04-03 09:59:14