簡體   English   中英

使用for循環加載50,000個項目的ArrayList時如何提高性能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM