雖然這是違反直覺的,但這是我加速這項操作的數量巨大的方式。
正是我正在做:
ArrayList < HashMap < String , String >> results; // This has been filled with a whole bunch of results
的ArrayList < HashMap中<字符串,字符串>>丟棄= findResultsToDiscard(結果);
results.removeall(discard);
但是,刪除所有方法需要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節約指數的而不是包含HashMap數組的數組。事實證明,加速刪除對象的速度更快(現在大約爲0.1秒),並且會更有效率,因爲我們不需要創建大量要刪除的結果。
希望這可以幫助別人。
除非您確定性能在代碼中的這個特定點上是個問題,否則我會建議忽略效率。還有一些其他的事情你應該考慮,例如:你是否保留引用原始列表的其他地方的變化應該體現?那麼你不能使用1.你可以使用'ArrayList.remove()',我。即「equals()」的語義是否像列表中的對象一樣工作? – 2009-08-21 08:02:47
那麼,我談論的對象包含一些數組列表,我必須對它們做同樣的處理。我不知道這可能是一個瓶頸(我還沒有測試過),但我想知道你們是如何刪除項目,看看我是否有更好的選擇。回答你的第二個問題:是的,我可以使用remove()方法。 – 2009-08-21 08:09:25