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

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

例如我需要在每个索引的arraylist中包含hashmap,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public class Testing {
  private ArrayList &lt &lt HashMap&lt String, String>> myData ;
  public static void main(String[] args) {
    myData = new ArrayList &lt HashMap &lt String, String>>();
    initialize();
    //After initialize myData should contain different Hashmaps.
  }
  public static void initialize() {    
    for (int i= 0; i &lt 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相关。


如果你需要一份地图清单,那就是你要做的,没有办法。(实际上,您可以编写一个helper方法,在第一次访问映射时对其进行初始化,并且只通过该helper方法访问映射,但我并不建议这样做)。

但是您可以重新考虑您的设计并使用不同的数据结构,也许可以改变映射/列表关系并使用一个guava Multimap。这将仅在需要时初始化集合,并且您可以保存初始化例程。

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


通常,清晰度比性能更重要。在这个例子中,编译它将是一个改进。;)

您创建的对象不够重要,但减少其消耗的一种方法是使用pojo而不是hashmap。


我不认为这很糟糕。

既然你想要一个ArrayList<>,那就没什么错。即使没有难闻的气味。)