我很难比较这两者。所以我吸引那些比我更详细的人。 我必须将一个功能对象链接到一个名称(当然是String ...),函数调用是这样的:
serviceInstance.useThis(String name, Object parameter);
到目前为止,我正在考虑"后端"这个API:
1和2基本相同,但如果我需要重用enum用于其他用途,则为1。 我主要关注的是Enum.valueOf(String name)与String.hashCode()相比有多快?
这是我正在玩的两个实现:
public class HashMapHandlerType{
static HashMap<String, MyInterfaceProvider> handlers = ~ ;
public void useThis(String name, Object parameter) throws IllegalArgumentException {
MyInterfaceProvider prov = handlers.get(name);
if(prov != null){
prov.get().use(parameter);
}else{
throw new IllegalArgumentException(name);
}
}
}
public class EnumTypeHandler{
public void useThis(String name, Object parameter) throws IllegalArgumentException {
HandlersEnum.valueOf(name).get().use(parameter);
}
}
如果我想使用EnumMap,Enum的优点并不是担心会发生碰撞。 但是Enum的valueOf是否足以赢得String.hashCode()+在哈希函数中处理潜在的冲突?
答案 0 :(得分:3)
使用valueOf时,它基本上会懒惰地创建一个地图。此外,在创建地图时,它使用反射来获取值。因为与使用String.hashCode()相比,反射调用肯定是昂贵的,在你的情况下已经计算过。
答案 1 :(得分:2)
Louis Wasserman的评论回答了具体问题。这是如何处理这类问题的更一般的答案。
这有两个主要优点。如果问题不重要,因为最简单的实施足够快,你不会浪费任何时间。如果相对性能问题很重要,则可以使用实际数据在实际程序的上下文中进行测量。