【Java】 列挙型 / enum型 ~ 応用編 / EnumSet・EnumMap ~

■ EnumSet

 * ビット和なフラグを使いたい時に使用

サンプル

CountryType.java
import java.util.EnumSet;

public enum CountryType {
   None,
   JAPAN,
   CHINA,
   INDIA,
   USA,
   MEXICO,
   UK,
   ITALY,
   FRENCH,
   BRAZIL;
   
   private static EnumSet<CountryType> asias;
   
   static {
      asias = EnumSet.of(
            CountryType.JAPAN,
            CountryType.CHINA,
            CountryType.INDIA);
   }
   
   public boolean isAsia() {
      return asias.contains(this);
   }
}
Main.java
public class Main {
   public static void main(String[] args) {
      System.out.println("USA is Asia? : " + CountryType.USA.isAsia());
      System.out.println("JAPAN is Asia? : " + CountryType.JAPAN.isAsia());
   }
}
出力結果
USA is Asia? : false
JAPAN is Asia? : true

補足:EnumSetを初期化時に何も入れたくない場合

* EnumSet.noneOf(XXXXX.class)を使う
import java.util.EnumSet;
import java.util.Set;

public class Main {
  public static void main(String[] args) {
    Set<CountryType> flag = EnumSet.noneOf(CountryType.class);
    flag.add(CountryType.FRENCH);
  }
}

■ EnumMap

 * 列挙定数に対して値をセットして使いたい場合に使用する

サンプル

MonthType.java

import java.util.EnumMap;

public enum MonthType {
   None,
   JANUARY,
   FEBRUARY,
   MARCH,
   APRIL,
   MAY,
   JUNE,
   JULY,
   AUGUST,
   SEPTEMBER,
   OCTOBER,
   NOVEMBER,
   DECEMBER;
   
   private static EnumMap<MonthType, Integer> enums;
   
   static {
      enums = new EnumMap<MonthType, Integer>(MonthType.class);
      int value = 0;
      for(MonthType resultEnum : MonthType.values()){
         enums.put(resultEnum, value);
         value++;
       }
   }
   
   public Integer getValue() {
      return enums.get(this);
   }
}

Main.java

public class Main {
   public static void main(String[] args) {
      System.out.println("JANUARY : " + MonthType.JANUARY.getValue());
      System.out.println("MARCH : " + MonthType.MARCH.getValue());
   }
}

出力結果

JANUARY : 1
MARCH : 3


関連記事

列挙型 / enum型 ~基本編~

http://blogs.yahoo.co.jp/dk521123/32503689.html

列挙型 / enum型 ~応用編 / Enumのソート ~

http://blogs.yahoo.co.jp/dk521123/35290924.html

コレクション ~ Map 編~

http://blogs.yahoo.co.jp/dk521123/33002154.html

コレクション ~ Set 編~

http://blogs.yahoo.co.jp/dk521123/33006348.html