如何避免在java循环中频繁创建对象?

sat*_*sat 0 java performance android memory-management

例如,我需要我的ArrayList应该在每个索引处包含hashmap,例如

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相关.

Sea*_*oyd 5

如果您需要地图列表,那么您就必须这样做,没有办法解决这个问题.(实际上,你可以编写一个辅助方法,在第一次访问时初始化地图,并且只通过该辅助方法访问地图,但我不建议这样做).

但您可以重新考虑您的设计并使用不同的数据结构,也许可以转换Map/List关系并使用GuavaMultimap.这只会在需要时初始化集合,并且您可以保存初始化例程.

此外,地图列表通常可以由自定义对象列表替换.根据键是否是动态的,自定义对象可能更有意义.