2017-09-05 78 views
1

我有这样一个类:复杂性()在枚举类方法

public enum ReturnCode{ 

Code1(
    "Code1", 
    "Return this code when there is an erreur" 
    ), 

Code2(
    "Code2", 
    "Return this code when everything ok" 
    ); 

ReturnCode(final String code, final String detail) { 
    this.code = code; 
    this.detail = detail; 
} 

private static Map<String, ReturnCode> map = 
     new HashMap<String, ReturnCode>(); 

static { 
    for (ReturnCode returnCode : ReturnCode.values()) { 
     map.put(returnCode.code, returnCode); 
    } 
} 

public static ReturnCode fromValue(String code) { 
    return map.get(code); 
} 

我只是想在复杂性方面知道,是它优于:

public static returnCode fromValue(String code) { 
     for (returnCode returnCode : returnCode.values()) { 
      if (returnCode .code.equals(code)) { 
       return returnCode ; 
      } 
     } 
    } 

因为它似乎每次我们在第一个方法中调用fromValue时,它会生成一个映射,所以它也是O(n)?

谢谢。

回答

0

地图是静态对象。此外,它由静态代码块中的代码填充。每个类只调用一次静态代码块。没有理由为什么地图会生成一次以上。

这意味着你的第二个fromValue(),它是O(n),将会比原来的fromValue()慢O(1)的性能。