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

标签 java android performance 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);
    } 

  }
}

上面的代码每次循环都会创建 HashMap 对象, 有什么更好的方法可以避免每次都创建对象? 我在 Android 中使用这段代码,但我认为这更通用,并且与 Java 更多相关。

最佳答案

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

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

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

关于java - java中如何避免在循环中频繁创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5014243/

相关文章:

javax.xml.bind.UnmarshalException : unexpected element (uri:

Java Date 对象解析精度在 SimpleDateFormat 上关闭

java - 外键正在更新为空

java - Android:如何使用户能够重新排列 ListView 中的元素?

Android,在构建时更改包名称和 Assets

javascript - 缓存 this 引用

performance - 高效的奇偶数据顺序排列方式

java - optaplanner:如何强制规划变量值仅使用一次

java - 使用 HttpsURLConnection 的 InputStream 读取 xml 数据时出现意外的流结束错误

c++ - 在 VS2013 上测量 vector<unique_ptr> 的性能?