Понимание enumset для перечислителей
Насколько я понял, было бы намного проще и понятнее в использовании EnumSet
и что Set
был специально разработан для использования с перечислителями. Мой вопрос заключается в том, следует ли нам рассмотреть возможность использования EnumSet
каждый раз нам нужно поддерживать некоторую коллекцию перечислителей. Например, у меня есть следующее перечисление:
public enum ReportColumns{
ID,
NAME,
CURRENCY
//It may contain much more enumerators than I mentioned here
public int getMaintenanceValue(){
//impl
}
}
И мне нужно использовать некоторую коллекцию перечислений в методе:
public void persist(Collection<ReportColumns> cols){
List<Integer> ints = new LinkedList<>();
for(ReportColumn c: cols){
ints.add(c.getMaintenanceValue());
}
//do some persistance-related operations
}
так что, если мне все равно, заказана ли коллекция или нет, я должна использовать EnumSet<E>
каждый раз, чтобы улучшить производительность?
1 ответ
Как правило, всякий раз, когда вы создаете коллекцию перечислений и не заботитесь об их порядке, вы должны создать EnumSet
, Как вы упомянули, это немного увеличит производительность (фактически, большинство известных мне инструментов статического анализа кода предупреждают о том, что они не используются).
Хотя для объявления метода я бы не стал. Как еще одно практическое правило, методы должны использовать максимально возможный тип, который все еще имеет смысл. Публичный контракт этого метода должен быть "дай мне кучу перечислений, и я их сохраню". Метод не должен заботиться о том, какая коллекция передается, поэтому нет смысла заставлять тип параметра быть EnumSet
, Если конкретный тип, который вы передаете, действительно EnumSet
в любом случае вы получите все преимущества производительности.