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

时间:2015-09-02 23:54:06

标签: java dictionary constructor initialization

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

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

   public A(){

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

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

3 个答案:

答案 0 :(得分:2)

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保证。这将:

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);
   } 
}

答案 1 :(得分:1)

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

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

您当前版本正在做的是它使用实例初始化程序块(a.k.a。double brace initialization),这会在后台创建一个不必要的匿名类。这样做没有任何实际好处。相反,它可能会导致一个小performance hit

答案 2 :(得分:0)

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