[Effective Java 3/e] 아이템 37 - odinal 인덱싱 대신 EnumMap을 사용하라


아이템 37 - odinal 인덱싱 대신 EnumMap을 사용하라

ordinal() 을 배열 인덱스로 사용 - 따라 하지 말 것

Set<Plant>[] plantsByLifeCycle = (Set<Plant>[]) new Set[Plant.LifeCycle.values().length];

for(int i = 0; i < plantsByLifeCycle.length; i++)
  plantsByLifeCycle[i] = new HashSet<>();

for(Plant p : garden)
  plantsByLifeCycle[p.lifeCycle.ordinal()].add(p);
}

EnumMap을 사용해 데이터와 열거 타입을 매핑한다

Map<Plant.LifeCycle, Set<Plant>> plantsByLifeCycle = new EnumMap<>(Plant.LifeCycle.class);

for(Plant.LifeCycle lc : Plant.LifeCycle.values())
  plantsByLifeCycle.put(lc, new HashSet<>());

for(Plant p : garden)
  plantsByLifeCycle.get(p.lifeCycle).add(p);
}

정리

  • 배열의 인덱스를 얻기 위해 ordinal을 쓰는 대신 EnumMap을 사용하라