簡體   English   中英

如何避免在Java循環中頻繁創建對象?

[英]How to avoid frequent creation of objects in a loop in java?

例如,我需要在我的ArrayList的每個索引中包含哈希圖的地方,例如

Public class Testing {
  private ArrayList < < HashMap< String, String>> myData ;
  public static void main(String[] args) {
    myData = new ArrayList < HashMap < String, String>>();
    initialize();
    //After initialize myData should contain different Hashmaps.
  }
  public static void initialize() {     
    for (int i= 0; i < 10 ;i++) {
      myMap = new HashMap();  //Bad because,creating Objects inside the loop.
      myMap.put("title", "abc"+i); //Adding i, just to show that new values are stored everytime
      myMap.put("name", "xyz"+i);
      myData.add(myMap);
    } 

  }
}

上面的代碼將在循環中每次創建哈希映射對象,這樣做的更好方法是什么,這樣我就可以避免每次創建對象? 我在Android中使用此代碼,但我認為這更通用,並且與Java相關性更高。

如果您需要地圖列表,那將是您要做的,沒有辦法解決。 (實際上,您可以編寫一個助手方法,該方法在首次訪問時初始化地圖,並且僅通過該助手方法訪問地圖,但我並不建議這樣做)。

但是您可以重新考慮您的設計並使用其他數據結構,也許扭轉Map / List關系並使用Guava Multimap 那只會在需要它們時初始化集合,並且您可以保存初始化例程。

同樣,地圖列表通常可以用自定義對象列表替換。 根據鍵是否為動態鍵,自定義對象可能更有意義。

通常,清晰度比性能更重要。 在此示例中,對其進行編譯將是一個改進。 ;)

您沒有創建足夠多的對象真正重要,但是減少其消耗的一種方法是使用POJO而不是HashMap。

我認為這並不壞。

由於您需要ArrayList<<HashMap<String, String>> ,所以沒有錯。 甚至沒有難聞的氣味:)

暫無
暫無

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

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