java多映射与gson性能
我用的是葡萄籽和番石榴。我有一个我想序列化的类,它看起来像这样sscce
import com.google.common.collect.Multimap;
public class FooManager {
private Multimap<String, Foo> managedFoos;
// other stuff
}
Gson不知道如何序列化它。所以我这样做了:
public final class FoomapSerializer implements
JsonSerializer<Multimap<String, Foo>> {
@SuppressWarnings("serial")
private static final Type t =
new TypeToken<Map<String, Collection<Foo>>>() {}.getType();
@Override
public JsonElement serialize(Multimap<String, Foo> arg0, Type arg1,
JsonSerializationContext arg2) {
return arg2.serialize(arg0.asMap(), t);
}
}
然而,我担心反复调用.asMap()
会很慢,即使底层的Map
很少改变。(Foo
对象的序列化将经常更改,但初始化后映射本身不会更改)。有更好的办法吗
# 1 楼答案
多重地图。asMap在O(1)时间内返回多映射的缓存视图。这不是一个昂贵的手术。(事实上,它非常便宜,最多需要一次分配。)
# 2 楼答案
下面是一个使用Guava的
TypeToken
的通用多重映射序列化程序的示例。如果需要的话,您可以在这方面做一些变化,比如为需要序列化的每个多映射类型创建序列化程序实例,这样您只需为每个类型解析一次asMap()
的返回类型