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 に答える