虽然这是反直觉的,但这是我大幅加快此操作的方式。
正是我在做什么:
ArrayList < HashMap < String , String >> results; // This has been filled with a whole bunch of results
ArrayList < HashMap < String , String >> 丢弃 = findResultsToDiscard(results);
结果.removeall(丢弃);
但是,删除所有方法需要 6 秒以上(不包括获取丢弃结果的方法)才能从 2000 个数组(ish)中删除大约 800 个结果。
我尝试了 gustafc 和其他人在这篇文章中建议的迭代器方法。
这确实稍微加快了操作(降低到大约 4 秒),但这仍然不够好。所以我尝试了一些冒险的事情......
ArrayList < HashMap < String, String>> results;
List < Integer > noIndex = getTheDiscardedIndexs(results);
for (int j = noIndex.size()-1; j >= 0; j-- ){
results.remove(noIndex.get(j).intValue());
}
而 getTheDiscardedIndexs 保存索引数组而不是 HashMaps 数组。事实证明,这加快了删除对象的速度(现在大约 0.1 秒),并且内存效率更高,因为我们不需要创建大量结果来删除。
希望这可以帮助某人。