Карты Enum представлены внутри как массивы. 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);
}
}
Oh. теперь я вижу, спасибо! =) – xCroNic
Не уверен, что он на 100% прав. Отметьте комментарий «(Cached for performance.)» Для этих полей? Обычно просто не имеет смысла сериализовать дублируемую информацию, поэтому я предполагаю, что это могло быть причиной: они могут быть рассчитаны из непереходных полей. – Marvin
@Marvin, EnumMap не имеет других полей данных. keyUniverse - это всего лишь массив всех значений Enum соответствующего Enum. Его можно прочитать из этого Enum в любое время, но с полем быстрее. Я думаю, что комментарий «(Cached for performance.)» Означает это – xCroNic
- 1. Как вернуть EnumMap если ключи являются частными
- 2. Почему массивы unboxed не являются экземплярами складных?
- 3. Являются ли внутренние классы непитоническими?
- 4. Как фильтровать внутренние массивы из многомерного массива
- 5. Объединить внутренние массивы в многомерном массиве - PHP
- 6. Как проверить внутренние массивы с помощью phpunit
- 7. PHP Сквозные массивы и внутренние данные массива
- 8. Java - Хранение смешанных типов (массивы, внутренние таблицы)
- 9. AngularJS Заказать JSON массив и внутренние массивы
- 10. C Являются ли массивы структурированными?
- 11. Являются ли массивы C++ конструктивными?
- 12. Являются ли обычные массивы динамическими?
- 13. Являются ли массивы Javascript разреженными?
- 14. Являются ли массивы действительно объектами?
- 15. Являются ли массивы JavaScript ассоциативными?
- 16. Разница между браузерами между строгими/переходными DOCTYPEs
- 17. Почему массивы Pascal const на самом деле не являются константами?
- 18. Управление переходными зависимостями отдельно
- 19. Почему внутренние классы RowMapper статичны?
- 20. Являются ли массивы указателем const в C++?
- 21. EnumMap против Свойства
- 22. Инициализация EnumMap из HashMap
- 23. Сегментация ключей Jackson EnumMap
- 24. Поведение Strange EnumMap
- 25. Заменить ConcurrentHashMap с EnumMap
- 26. Weird Синтаксис EnumMap
- 27. EnumMap против Enum значения
- 28. EnumMap raise NullPointerException
- 29. Являются ли массивы javascript фактически реализованы как массивы?
- 30. Почему внутренние классы делают доступными частные методы?
С помощью HashMap проверка ключей перечисления медленнее, чем идеальна. Он не оптимизирован для перечислений. – Prashant
@Prashant, который не имеет отношения к этому вопросу - вот почему 'EnumMap' существует в первую очередь. –
@ AndyTurner: Я получил вашу точку, но производительность была основной причиной использования массивов внутри. вы можете взглянуть на пункт 33 в «Эффективной java от Joshua bloch» – Prashant