2

据我了解,它使用起来会更容易和更清晰,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>每次都使用它来提高性能吗?

4

1 回答 1

3

根据经验,每当您创建枚举集合并且不关心它们的顺序时,您应该创建一个EnumSet. 正如您所提到的,它会稍微提高性能(事实上,我知道的大多数静态代码分析工具实际上都会警告不要使用它)。

不过,对于方法声明,我不会。作为另一个经验法则,方法应该使用可能仍然有意义的“最高”类型。这种方法的公共契约应该是“给我一堆枚举,我会坚持下去”。该方法不应该关心传递了什么集合,因此强制参数类型为EnumSet. 如果您传递的具体类型确实是一个,EnumSet那么无论如何您都将获得所有性能优势。

于 2015-07-06T06:59:48.310 回答