[英]Why do I get an OutOfMemoryError when inserting 50,000 objects into HashMap?
[英]How can I improve performance while loading ArrayList with 50,000 items using for loop
我有一個RealmResults對象。 我需要將其一列復制到另一個支持Collections.shuffle()的對象中
目前,我正在運行一個for循環來加載ArrayList對象。 但是,這花費了很多時間,大約1秒鍾,這影響了我的應用程序的recyclerview。
我還有其他選擇可以用來加載ArrayList嗎? 或ArrayList以外的其他任何東西都可以在更少的時間內完成相同的任務。
---------------下面為清楚起見的代碼---------------
mResults = mRealm.where(Quote.class).equalTo("AUTH_TITLE", mAuthorNameReceived).findAll();
indices = new ArrayList<>();
for (int i = 0; i < mResults.size(); i++) {
indices.add(i);
description.add(mResults.get(i).getPOST_DESCRIPTION());
}
Collections.shuffle(description);
這取決於您要選擇的50,000個中的多少個?
如果很少,則可以使用更簡單的策略。
也許從500個隨機數中選擇一個。這將為您隨機選擇100個。
上側: Quick和O(1)
。
下側:並非完全隨機。
使用BitSet
跟蹤您已經選擇了哪些對象,然后繼續隨機選擇(在BitSet
標記每個對象),丟棄所有已經選擇的對象,直到您有足夠的為止。
上側:快速進行小選擇。
下側:當所選的數字接近所有數字時,它們會急劇下降。 想象一下選擇最后一個要花多長時間。
使用數據庫。
上行:除非需要處理數百萬條記錄,否則不太可能顯着降低性能。 不利方面:您需要一個數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.