2015-07-06 6 views
2

Насколько я понял, было бы намного проще и понятнее использовать EnumSet и что Set был специально разработан для использования с Enumerators. Мой вопрос заключается в том, следует ли нам рассматривать использование EnumSet каждый раз, когда нам нужно поддерживать некоторую коллекцию счетчиков. Например, у меня есть он следующее перечисление:Понимание enumset для счетчиков

public enum ReportColumns{ 
    ID, 
    NAME, 
    CURRENCY 
    //It may contain much more enumerators than I mentioned here 

    public int getMaintenanceValue(){ 
     //impl 
    } 
} 

И мне нужно использовать некоторую коллекцию OFTHE перечисления в методе:

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> каждый раз, чтобы улучшить производительность?

ответ

3

Как правило, всякий раз, когда вы создаете коллекцию перечислений и не заботитесь о своем заказе, вы должны создать EnumSet. Как вы уже упоминали, это даст вам небольшое увеличение производительности (на самом деле, большинство статических инструментов анализа кода, которые, как я знаю, фактически предупреждают о том, что не используют его).

Для метода декларация, хотя я бы не стал. Как еще одно правило, методы должны использовать возможный «самый высокий» тип, который все еще имеет смысл. Общественный контракт этого метода должен быть «дать мне кучу перечислений, и я буду упорствовать». Метод не должен заботиться о том, какая коллекция передана, поэтому нет никакого смысла заставлять тип параметра быть EnumSet. Если конкретный тип, который вы проходите, действительно равен EnumSet, вы все равно получите все преимущества.

Смежные вопросы