例如我需要我的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相关 .
3 回答
我不认为这很糟糕 .
既然你想要一个
ArrayList<<HashMap<String, String>>
,就没有错 . 即使没有难闻的气味:)通常,清晰度比性能更重要 . 在这个例子中,编译它将是一个改进 . ;)
您没有创建足够的对象来真正重要,但减少其消耗的一种方法是使用POJO而不是HashMap .
如果您需要 Map 列表,那么您就必须这样做,没有办法解决这个问题 . (实际上,你可以编写一个辅助方法,在第一次访问时初始化 Map ,并且只通过该辅助方法访问 Map ,但我不建议这样做) .
但您可以重新考虑您的设计并使用不同的数据结构,也许可以转换Map / List关系并使用Guava Multimap . 这只会在需要时初始化集合,您可以保存初始化例程 .
此外, Map 列表通常可以由自定义对象列表替换 . 根据键是否是动态的,自定义对象可能更有意义 .