Подтвердить что ты не робот

Есть ли соответствующая неизменяемая enumMap в guava?

Недавно я узнал о преимуществах EnumMap на Java и хотел бы заменить существующий ImmutableMap<OccupancyType, BigDecimal> на EnumMap. Тем не менее, мне также понравится неизменяемое свойство, предлагаемое ImmutableMap.

  • Есть ли вариант, ImmutableEnumMap доступен в guava?
  • С точки зрения хранения, который один (EnumMap vs ImmutableMap) работает лучше?
  • Я не мог найти сравнение этих двух. Я был бы признателен, если бы кто-то мог указать мне ссылку или дать представление о эффективности двух структур данных?
4b9b3361

Ответ 1

Гуава здесь.

В настоящее время у Guava нет варианта ImmutableEnumMap, но если бы это произошло, это, скорее всего, было бы оберткой вокруг EnumMap. (Тем не менее, возможны несколько более надежных реализаций.)

EnumMap будет работать лучше, чем базовый ImmutableMap, в любом случае; это трудно или невозможно превзойти.

создаст проблему, чтобы исследовать добавление варианта ImmutableMap для типов ключей перечисления.)


Обновление: Guava 14 добавляет Maps.immutableEnumMap().

Ответ 2

Мне просто нужно было привести пример, когда ImmutableEnumMap находится в Guava 14.0, потому что это пакет-частный класс, поэтому вы не можете сделать ImmutableEnumMap.of(). Вы должны сделать Maps.immutableEnumMap() вместо этого.

private final ImmutableMap<MyEnum, String> myEnumMap = Maps.immutableEnumMap(ImmutableMap.of(
        MyEnum.A,   "A",
        MyEnum.B,   "B",
        MyEnum.C,   "C"
        ));

Не уверен, есть ли более естественный синтаксис.

Ответ 3

Поскольку guava ImmutableEnumMap по-прежнему отмечен как бета-версия версии 14, я бы предложил использовать немодифицируемый вид карты перечисления и затем отбросить исходную ссылку на карту перечисления, чтобы гарантировать ее неизменность.

Пример (в конструкторе):

Map entries = new EnumMap <SomeEnum, T>(SomeEnum.class);
... // (fill in entries)
this.entries = Collections.unmodifiableMap(entries);