Multimap和gson性能

dur*_*597 3 java performance multimap gson guava

我正在使用Gson和Guava.我有一个我想序列化的类,看起来像这样的sscce

import com.google.common.collect.Multimap;
public class FooManager {
  private Multimap<String, Foo> managedFoos;
  // other stuff
}
Run Code Online (Sandbox Code Playgroud)

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,我担心.asMap()一遍又一遍地打电话会很慢,即使潜在的Map事情很少发生变化.(Foo对象的序列化将经常更改,但映射本身不会在初始化之后).有没有更好的办法?

Lou*_*man 7

Multimap.asMap在O(1)时间内返回Multimap的缓存视图.这不是一项昂贵的操作.(事实上​​,它非常便宜,最多需要一次分配.)