gpt4 book ai didi

java - HashMap 到 ArrayList 内存不足

转载 作者:行者123 更新时间:2023-11-29 04:44:51 26 4
gpt4 key购买 nike

我有一个类似的代码:

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));

最佳答案

你可以稍微改进一下你的代码,我会写两个解决方案,第一个更好,但如果你不能使用它,请使用第二个:

在这两种解决方案中,都使用具有初始容量的构造函数。

如果可以更改 int 值中的键,请使用 SparseArray:

ArrayList<SparseArray<String>> myArray = new ArrayList<>(8000);
for(int i=0; i<8000; i++) {
SparseArray<String> sp = new SparseArray<>(2);
sp.put(1, string1);
sp.put(2, string2);
myArray.add(sp);
}

改用ArrayMap:

ArrayList<ArrayMap<String, String>> myArray = new ArrayList<>(8000);
for (int i = 0; i < 8000; i++) {
ArrayMap<String, String> am = new ArrayMap<>(2);
am.put("key1", string1);
am.put("key2", string2);
myArray.add(am);
}

关于java - HashMap 到 ArrayList 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37613820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com