java - ¿Existe un enumMap inmutable correspondiente en la guayaba?
immutability guava (3)
Recientemente aprendí sobre los beneficios de EnumMap en Java y me gustaría reemplazar el ImmutableMap<OccupancyType, BigDecimal>
por EnumMap. Sin embargo, también me gustaría la propiedad inmutable ofrecida por ImmutableMap.
- ¿Existe una variante, ImmutableEnumMap disponible en guava?
- En términos de almacenamiento, ¿cuál (EnumMap vs ImmutableMap) se desempeña mejor?
- No pude encontrar una comparación de los dos. ¿Apreciaría si alguien me puede señalar un enlace o dar algunas ideas sobre la eficiencia de las dos estructuras de datos?
Contribuidor de guayaba aquí.
Guava actualmente no tiene una variante de ImmutableEnumMap
, pero si la tuviera, probablemente solo sería una envoltura alrededor de un EnumMap
. (Dicho esto, son posibles implementaciones un poco mejores e inmutables.)
En cualquier caso, EnumMap
funcionará mejor que el EnumMap
básico; Es difícil o imposible de superar.
(Sin embargo, presentaré un problema para investigar la adición de una variante de ImmutableMap para los tipos de clave de enumeración).
Actualización: Guava 14 agrega Maps.immutableEnumMap()
.
Dado que la guava ImmutableEnumMap aún está marcada como beta en la versión 14, sugeriría usar una vista no modificable de un mapa de enumeración y luego descartar la referencia original al mapa de enumeración para garantizar que sea inmutable.
Ejemplo (en un constructor):
Map entries = new EnumMap <SomeEnum, T>(SomeEnum.class);
... // (fill in entries)
this.entries = Collections.unmodifiableMap(entries);
Solo quería dar un ejemplo ahora que ImmutableEnumMap
está en Guava 14.0 , porque es una clase de paquete privado, por lo que no se puede hacer ImmutableEnumMap.of()
. Tienes que hacer Maps.immutableEnumMap()
lugar.
private final ImmutableMap<MyEnum, String> myEnumMap = Maps.immutableEnumMap(ImmutableMap.of(
MyEnum.A, "A",
MyEnum.B, "B",
MyEnum.C, "C"
));
No estoy seguro si hay una sintaxis más natural.