【发布时间】:2016-06-03 11:59:06
【问题描述】:
我有类似的代码:
ArrayList<HashMap<String, String>> myArray = new ArrayList<HashMap<String, String>>();
for(int i=0; i<8000; i++){
HashMap <String, String> hashMap = new HashMap<String, String>();
hashMap.put("key1", string1);
hashMap.put("key2", string2);
myArray.add(hashMap);
}
有时在旧版 Android 设备中,此代码会导致 new HashMap 上的 OutOfMemory。
有没有办法改进这段代码? 谢谢
编辑:
我的应用程序类中有这个结构来检索应用程序周围的这个数组并执行类似的操作:
ArrayList<String> allObj1 = new ArrayList<String>();
ArrayList<String> allObj2 = new ArrayList<String>();
for (int i = 0; i<myArray.size(); i++) {
String obj1 = myArray.get(i).get("key1");
String obj2 = myArray.get(i).get("key2");
allObj1.add(obj1);
allObj2.add(obj2);
}
String[] stringObj1 = allObj1.toArray(new String[allObj1.size()]);
String[] stringObj2 = allObj2.toArray(new String[allObj2.size()]);
list.setAdapter(new Adapter(this, stringObj1, stringObj2));
【问题讨论】:
-
在 codereview 上试试这个
-
为什么需要一个包含 8000 个相同哈希图的列表?
-
@zapl "similar code" string1 和 string2 对于每个 i 总是不同的
-
仅供参考,这不是内存泄漏,这是内存不足。
-
这并不是真正的“泄漏”内存,是吗?您只是创建了一堆哈希映射,然后将它们存储在一个列表中。假设您持有
myArray,则哈希映射(和列表)不符合 GC 条件。
标签: java android arraylist hashmap