Я смотрел под капотом на EnumSet.allOf
, и он выглядит очень эффективно, особенно для перечислений с менее чем 64 значениями.
В основном все наборы совместно используют один массив из всех возможных значений enum, и единственная другая часть информации - это битмаска, которая в случае allOf
устанавливается одним махом.
С другой стороны Enum.values () кажется немного черной магией. Кроме того, он возвращает массив, а не коллекцию, поэтому во многих случаях он должен быть украшен Arrays.asList() для использования в любом месте, которое ожидает коллекцию.
Итак, если EnumSet.allOf
предпочтительнее Enum.values
?
Более конкретно, какую форму итератора for
следует использовать:
for ( final MyEnum val: MyEnum.values( ) );
или
for ( final MyEnum val: EnumSet.allOf( MyEnum.class ) );