java 小技巧 (1)

  1. 空间换时间的小把戏
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) 很标准的空间换时间的小把戏。