일반적으로 사람들은 키가 enum 일 때 EnumMap을 사용해야한다고 말합니다. 하지만이 사건에 대해 각 enum 값의 빈도를 계산하려면 어떻게해야합니까? 그것은 trove4j TObjectIntHashMap이 코드에서 더 나은 것처럼 보입니다.Trove4j TObjectIntHashMap 대 EnumMap <Enum, Integer>
다음 trove4j 컬렉션 예이다
가 EnumMap는 경우TObjectIntMap<ExtraOperator> extraOpr = new TObjectIntHashMap<ExtraOperator>();
extraOpr.adjustOrPutValue(ExtraOperator.ternary, 1, 1);
코드 보이는 같은
Map<ExtraOperator, Integer> extraOpr = Maps.newEnumMap(ExtraOperator.class);
if (extraOpr.containsKey(ExtraOperator.ternary)) {
extraOpr.put(ExtraOperator.ternary, extraOpr.get(ExtraOperator.ternary) + 1);
} else {
extraOpr.put(ExtraOperator.ternary, 1);
}
따라서 trove4j 검사 존재 내부적 수 자동 증가 값 이것은 코드를보다 간결하게 만든다. EnumMap은 enum을 키로 사용하여 성능이 향상되지만 Integer (boxing 및 unboxing)의 검색 및 증가도 비용이 소요됩니다.
낮은 메모리 비용과 빠른 속도를 고려할 때 어느 것이 더 좋을까요?
'EnumMap'을 덮어 쓰거나 감싸면 코드가 간결 해집니다. 'EnumMap'은'Enum'을 위해 최적화되어 있기 때문에 거의 확실합니다. 'Trove' 맵은 일반적인'Object'를위한 맵핑이므로 최적화가 없습니다. –
@BoristheSpider 같은 인수로, Trove는'int' 값에 최적화되어 있고 래퍼가 필요합니다. 어떤 유스 케이스가 더 나은지를 결정하기 위해 테스트해야 할 것이다. 나는 배열이 어느 쪽보다 낫다고 믿는다. –
@ PeterLawrey 물을 보유하고 있다고 생각하지 않습니다. 나는 해싱과 조회 비용이 위성 데이터의 저장 시간이 아니라고 생각한다. ... –