Java 使用for循环加载带有50000项的ArrayList时,如何提高性能

Java 使用for循环加载带有50000项的ArrayList时,如何提高性能,java,android,arraylist,collections,realm,Java,Android,Arraylist,Collections,Realm,我有一个RealmResults对象。我需要将其中的一列复制到另一个支持Collections.shuffle()的对象中 目前,我正在运行for循环以加载ArrayList对象。然而,这需要花费大量时间,大约1秒,这会影响我的应用程序的recyclerview 是否有其他方法可用于加载ArrayList?或者除了ArrayList之外的任何可以在更短时间内完成相同任务的东西 ---------------为了清楚起见,下面是代码--------------- mResults=mRealm.w

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

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

是否有其他方法可用于加载ArrayList?或者除了ArrayList之外的任何可以在更短时间内完成相同任务的东西

---------------为了清楚起见,下面是代码---------------

mResults=mRealm.where(Quote.class).equalTo(“AUTH_TITLE”,mauthornameeved).findAll();
索引=新的ArrayList();
对于(int i=0;i
这取决于您要选择的50000中的多少

如果数量很少,则可以使用更简单的策略


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

正面:快速和
O(1)

缺点:并非完全随机


使用
位集
跟踪已拾取的位集,然后继续随机拾取(在
位集中标记每个位集
),丢弃所有已拾取的位集,直到获得足够的位集为止

上侧:对于小选择,快速

缺点:当所选数字接近所有这些数字时,性能会急剧下降。想象一下,挑选最后一个需要多长时间


使用数据库

正面:在需要处理数百万条记录之前,不太可能明显降级。
缺点:你需要一个数据库。

我确定你不需要同时使用所有的5万个项目提交一个领域列表:然后从领域中随机选取一个元素。你能分享你的代码吗?等一下,你和问题中的那个人是同一个人。是的,这个解决方案不能很好地扩展到50000个对象(构建一个50000个整数的列表仍然需要大量的内存和时间)。只要你能以某种方式保证你的随机数不会被选中两次,你就可以简化逻辑。不发布代码,你希望得到什么样的答案?
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);