有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

   public A(){

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

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


共 (2) 个答案

  1. # 1 楼答案

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

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

    当前版本使用的是实例初始值设定项块(也称为double brace initialization),这会在后台创建一个不必要的匿名类。在这里这样做没有真正的好处。相反,它可能会导致一个小的performance hit

  2. # 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);
       } 
    }