- 空间换时间的小把戏
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| enum Type { NAME("姓名"), AGE("年龄"), ADDRESS("住址");
private String typeName;
Type(String typeName) { this.typeName = typeName; }
public static Type fromTypeName(String name) { for (Type t : Type.values()) { if (t.typeName.equals(name)) return t; } return null; } }
|
这样写的坏处大概就是这个 fromTypeName 里面的for循环,虽然语义很清晰,但是我们每次都要去遍历整个枚举对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| enum Type { NAME("姓名"), AGE("年龄"), ADDRESS("住址");
private static Map<String, Type> all = new HashMap<String, Type>() { { for (Type t : Type.values()) { all.put(t.typeName, t); } } }; private String typeName;
Type(String typeName) { this.typeName = typeName; }
public static B.Type fromTypeName(String name) { return all.get(name); } }
|
在运行之初,我们将所有的对象都放置于Map中,这样直接通过HaskMap去获取对象的效率更高,从O(n) -> O(1) 很标准的空间换时间的小把戏。