当前位置: 首页 > 面试题库 >

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

许出野
2023-03-14
问题内容

我有一个ArrayList,我想将其分成n个大小的较小列表,并对每个列表执行一个操作。我目前这样做的方法是

用Java中的ArrayLists实现(任何伪代码都可以)

    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;
        }

其中A是列表,n是所需列表的大小

我认为在处理相当大的列表(最大为100万个)时,这种方法会花费太多时间,因此我试图找出哪种方法更有效。


问题答案:

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

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

请注意,这与许多事情一样,对于而List不是RandomAccess(例如LinkedList)来说不是很有效。



 类似资料:
  • 如何使用流将Java列表拆分为Java大小为的较小列表? 在JavaScript中,我会使用函数并执行如下操作: 我试图用Java流来实现这一点,但我似乎不知道如何让它允许我使用数组列表

  • 我想用Java中所有可能的方法将一个列表拆分为给定数量的n个子列表。 例如,其中n=3将包括以下列表(但不是一个完整的解决方案-完成将需要更多的空间): 等 我适应了另一个类似的问题的解决方案(以所有可能的方式将列表分割成两个子列表),但它只适用于创建2个子列表的列表,我正在努力掌握如何实现灵活而不是硬编码的子列表数量。 这是我的密码: 我需要创建n个数的EGroup对象添加到,而不是硬编码的2,

  • 问题内容: 我正在寻找一种将python列表轻松分成两半的方法。 这样,如果我有一个数组: 我将能够得到: 问题答案: 如果需要功能:

  • 我正在学习Jjava,我在ArrayLists上发现了一个有趣的练习。目的是编写一个函数,该函数接受一个参数和一个参数,并返回一个子列表列表,其中每个子列表都有最大的元素。 例如: , 2) 应返回 [ [1,2], [3,4], , 3) 应返回 [ [1,2,3], , 1) 应返回 [ [1], [2], [3], 我这样做了,但只有当参数等于

  • 问题内容: 所以我想知道如何最好地创建一个空白列表的列表: 由于Python如何处理内存中的列表,因此不起作用: 这确实会创建,但是每个元素都是相同的列表: 类似于列表理解的作品: 但这使用Python VM进行循环。有什么方法可以使用隐式循环(利用C语言编写的代码)吗? 这实际上要慢一些。:( 问题答案: 可能唯一的方法是比 是 它不必每次迭代都创建一个新对象,并且在我的计算机上快15%。 编辑

  • 例如,我有一个可变大小的列表 我想用各种可能的方法把这个列表分成两部分: 我很确定这不是一个未知的问题,可能有一个算法,但是我找不到。此外,这不应使用任何外部库,而应使用简单的语言功能(循环、条件、方法/函数、变量等)在大多数语言中都可以找到。 我用Python写了一个hackish解决方案: 但是,它使用了库功能,总体上不是很好看。