首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Trove4j TObjectIntHashMap vs EnumMap<Enum,Integer>

Trove4j TObjectIntHashMap vs EnumMap<Enum,Integer>
EN

Stack Overflow用户
提问于 2013-08-11 14:41:31
回答 1查看 886关注 0票数 3

通常,当密钥是枚举时,人们会说我们应该使用EnumMap。但是这个例子呢?我想要计算每个枚举值的频率,看起来trove4j TObjectIntHashMap在代码上更好。

下面是trove4j集合的示例:

代码语言:javascript
复制
TObjectIntMap<ExtraOperator> extraOpr = new TObjectIntHashMap<ExtraOperator>();
extraOpr.adjustOrPutValue(ExtraOperator.ternary, 1, 1);

对于EnumMap,代码如下所示:

代码语言:javascript
复制
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使用枚举作为密钥具有更高的性能,但Integer(装箱和取消装箱)的检索和增量也需要花费时间。

如果我们考虑低内存成本和快速速度,哪一个会更好?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-11 14:52:28

如果您想要更低的成本/更快的速度,可以使用简单的数组。

代码语言:javascript
复制
 static final ExtraOperator[] VALUES = ExtraOperator.values();

 private final int[] counts = new int[VALUES.length];

 // to count.
 counts[e.ordinal()]++;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18173097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档