Понимание 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 в любом случае вы получите все преимущества производительности.

Другие вопросы по тегам