簡體   English   中英

在Java中的構造函數中初始化Map的更好方法

[英]Better way to initialize Map in constructor in Java

我試圖在一個類中將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不能保證這一點。 這將:

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

當前版本正在執行的操作是使用實例初始化程序塊(又稱為雙括號初始化 ),它將在后台創建不必要的匿名類。 在這里這樣做並沒有真正的好處。 相反,這可能會導致性能下降

如果您的真正目標是創建不可變Map ,則我強烈建議使用GuavaImmutableMap.Builder

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM