将列表划分为 n 大小的列表的有效方法

2022-08-31 14:37:54

我有一个 ,我想将其划分为较小的大小对象,并对每个对象执行操作。我目前执行此操作的方法是使用Java中的对象实现的。任何伪代码都可以。ArrayListListnArrayList

    for (int i = 1; i <= Math.floor((A.size() / n)); i++) {
            ArrayList temp = subArray(A, ((i * n) - n),
                    (i * n) - 1);
            // do stuff with temp
        }

    private ArrayList<Comparable> subArray(ArrayList A, int start,
                int end) {
            ArrayList toReturn = new ArrayList();
            for (int i = start; i <= end; i++) {
                toReturn.add(A.get(i));
            }
            return toReturn;
        }

其中 是列表,是所需列表的大小An

我相信这种方式在处理多达100万个相当大的列表时花费了太多时间,所以我正试图弄清楚什么会更有效率。


答案 1

您需要执行一些使用 List.subList(int, int) 视图而不是复制每个子列表的操作。要真正轻松地做到这一点,请使用GuavaLists.partition(List,int)方法:

List<Foo> foos = ...
for (List<Foo> partition : Lists.partition(foos, n)) {
  // do something with partition
}

请注意,与许多事情一样,这与 a 不是很有效(例如 a )。ListRandomAccessLinkedList


答案 2

例如:

    int partitionSize = 10;
    List<List<String>> partitions = new ArrayList<>();

    for (int i=0; i<yourlist.size(); i += partitionSize) {
        partitions.add(yourlist.subList(i, Math.min(i + partitionSize, yourlist.size())));
    }

    for (List<String> list : partitions) {
        //Do your stuff on each sub list
    }

推荐