2011-03-03 23 views

Respuesta

25

EnumSet tiene en realidad dos implementaciones - uno para enumeraciones con 64 o menos elementos (banderas que indican la presencia de valores en el conjunto se almacenan como long) y otra para otras enumeraciones (banderas se almacenan como long[]). métodos de fábrica de retorno EnumSet uno de ellos en función de la clase de enumeración se ha pasado.

una optimización de este tipo no tiene sentido para EnumMap (ya que se necesita matriz para almacenar los valores de todos modos), por lo tanto, EnumMap es una clase concreta.

+0

OK. Tiene sentido ahora mismo :) –

6

EnumSet utiliza dos implementaciones, RegularEnumSet y JumboEnumSet, dependiendo del tamaño de su enumeración (64 elementos siendo el umbral). Los métodos de fábrica delegan a la implementación apropiada.

EnumMap por el contrario funciona igual para todos los tipos de enum (mantiene una matriz de todos los elementos enum y una matriz de valores de igual tamaño), por lo que no es necesaria una clase abstracta.

Cuestiones relacionadas