在 Java 的构造函数中初始化 Map 的更好方法

Better way to initialize Map in constructor in Java

我正在尝试将 class 中的 Map 初始化为零。我是这样做的:

public class A{   
   private final Map<String,Integer> myMap;

   public A(){

       this.myMap = new HashMap<String,Integer>() {
           {
              put("a",0);
              put("b",0);
            }
       };  
     } 
}

我的问题:这是一个很好的实现吗?这有什么问题吗?或者有没有更好的方法来实现这个?

Rod_Algonquin 的意思是:

public class A {
   private final Map<String,Integer> myMap;

   public A() {

      this.myMap = new HashMap<String,Integer>();
      this.myMap.put("a",0);
      this.myMap.put("b",0);
   } 
}

根据 Luiggi Mendoza 的评论,由于 Map 被声明为 final,您可能希望地图不可修改,但 final 确实 not 保证。这将:

public class A {
   private final Map<String,Integer> myMap;

   public A() {
      Map<String,Integer> map = new HashMap<String,Integer>();
      map.put("a",0);
      map.put("b",0);
      this.myMap = Collections.unmodifiableMap(map);
   } 
}

更好的方法是在初始化地图后简单地输入值:

myMap = new HashMap<>();
myMap.put("a",0);
myMap.put("b",0);

您当前的版本正在做的是它使用了实例初始化器块(a.k.a。double brace initialization), which creates an unnecessary anonymous class in the background. There is no real benefit in doing so here. On the contrary, it will likely cause a small performance hit

如果您的真正目标是创建不可变的 Map,我强烈建议您使用 Guava's ImmutableMap.Builder