如何使用for循环在使用50,000个项目加载ArrayList时提高性能

时间:2016-04-07 13:49:42

标签: java android arraylist collections realm

我有一个RealmResults对象。我需要将其中一列复制到另一个支持Collections.shuffle()

的对象中

目前我正在运行 for 循环来加载ArrayList对象。然而,这需要花费大量时间,大约1秒钟,这会影响我的应用程序的回收站视图。

我可以用任何其他替代方法来加载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);

1 个答案:

答案 0 :(得分:0)

这取决于您想要选择的50,000个中的多少个?

如果很少,那么可以使用更简单的策略。

也许每500个中随机选一个。这将给你100种随机选择。

Up-Side:快速和O(1)

Down-Side:并非随意。

使用BitSet跟踪您已经选择的那些,并随意随意挑选(在BitSet中标记每一个),丢弃已经挑选的任何一个,直到您获得够了。

Up-Side:快速进行小选择。

Down-Side:当所选数字接近所有数字时,会大幅降级。想象一下,选择最后一个会花多长时间。

使用数据库。

Up-Side:在需要处理数百万条记录之前,不太可能明显降级。 Down-Side:您需要一个数据库。