Являются ли EnumMaps в Java идеальными хэш-картами?

Если список ключей хеш-функции для хэш-функции известен и неизменен, можно создать идеальную хэш-функцию. Enum в Java - это список известных и неизменных элементов. Поэтому должна быть возможность реализовать EnumMap как идеальный хеш. Это в настоящее время (1.7) сделано в Java?

4 ответа

Решение

Нет. EnumMap не использует хеширование Он использует enum порядковые значения как индексы в массиве типа значения.

Ссылка:

EnumMap это не какой-то HashMap что бы использовать хеширование внутри put а также get данные. Оно использует Array хранить <K, V> пара где K является Enumeration constant и использует ordinal value (положение Enumeration constant в декларации Enum, известен как порядковый номер) внутри put или же get данные. Enum.ordinal метод используется для получения ordinal value данного Enumeration constant,

Другими словами, EnumMap не использует хеширование, а порядковые значения Enumeration constant в качестве индекса put или же get <K, V> пара во внутреннем array,

Вы можете проверить исходный код EnumMap.put для уверенности в себе!

Ссылка, которую вы называете "EnumHashMap", фактически указывает на класс с именем "EnumMap", там нет никаких хэшей:

Enum карты представлены внутри как массивы. Это представление чрезвычайно компактно и эффективно

В качестве аргумента можно утверждать, что отображение значений enum на целое число (как индекс в вышеупомянутом массиве) является хэш-функцией, и да, это идеально, так как нет коллизий.

EnumMap не основан на хэше, он основан на массивах

частный переходный процесс K[] keyUniverse; ... частный переходный объект [] vals;

Другие вопросы по тегам