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

Java中在构造函数中初始化映射的更好方法,java,dictionary,constructor,initialization,Java,Dictionary,Constructor,Initialization,我试图在类中将映射初始化为零。我是这样做的: public class A{ private final Map<String,Integer> myMap; public A(){ this.myMap = new HashMap<String,Integer>() { { put("a",0); put("b",0); }

我试图在类中将映射初始化为零。我是这样做的:

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

   public A(){

       this.myMap = new HashMap<String,Integer>() {
           {
              put("a",0);
              put("b",0);
            }
       };  
     } 
}
公共A类{
私人最终地图myMap;
公共A(){
this.myMap=newhashmap(){
{
put(“a”,0);
put(“b”,0);
}
};  
} 
}

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

罗德·阿尔冈昆的意思是:

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

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

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

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

当前版本所做的是使用实例初始值设定项块(a.k.a.),它在后台创建了一个不必要的匿名类。在这里这样做没有真正的好处。相反,它可能会导致较小的错误。

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

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

当前版本所做的是使用实例初始值设定项块(a.k.a.),它在后台创建了一个不必要的匿名类。在这里这样做没有真正的好处。相反,它可能会导致一个小问题。

如果您的真正目标是创建一个不可变的
映射,我强烈建议您使用的如果您的真正目标是创建一个不可变的
映射
,我强烈建议您在初始化后使用's

如何
a和b。同意@Rod\u Algonquin。在您的例子中,这是最简单的。您的意思是在构造函数myMap.put(“a”,0)和myMap(“b”,0)的一侧?不一样吗?或者我遗漏了什么?如果您已声明
final Map
,则表示您希望/需要变量
myMap
不应重新分配。如果您还需要它不允许添加/删除/更新更多数据,那么您应该更改此设计以使用不可修改的映射。您如何
在初始化后放置
a和b它。同意@Rod\u Algonquin。在您的例子中,这是最简单的。您的意思是在构造函数myMap.put(“a”,0)和myMap(“b”,0)的一侧?不一样吗?或者我遗漏了什么?如果您已声明
final Map
,则表示您希望/需要变量
myMap
不应重新分配。如果您还需要它不允许添加/删除/更新更多数据,那么您应该将此设计更改为使用不可修改的映射。谢谢您的回答@MickMnemonic也与此类似。我不明白这个答案如何解决问题的“这是一个好的实现吗?这有什么问题吗?”部分。而且,一个只包含零的不可修改的映射听起来非常无用;我假设OP想要用零初始化映射,然后再更改一些值。谢谢你的回答@MickMnemonic也与此类似。我不明白这个答案如何解决问题的“这是一个好的实现吗?这有什么问题吗?”部分。而且,一个只包含零的不可修改的映射听起来非常无用;我假设OP想要用零初始化映射,然后再更改一些值。