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

Java8中分组的复杂性

龚凌
2023-03-14
问题内容

我想在下面学习给定语句的时间复杂度。(在Java8中)

html" target="_blank">list.stream().collect(groupingBy(...));

任何想法?


问题答案:

由于时间复杂度取决于所有操作,因此没有通用的答案。由于必须完全处理流,因此必须将其基本时间复杂度O(n)乘以每个元素完成的所有操作的成本。假设迭代成本本身并不比差O(n),大多数流源就是这种情况。

因此,假设没有影响时间复杂度的中间操作,则groupingBy必须评估每个元素的功能,该功能应独立于其他元素,因此不影响时间复杂度(无论它有多昂贵,因为O(…)时间复杂度仅表明我们,时间如何随着大量流元素而
缩放 )。然后,它将元素插入地图,这可能取决于已经包含的元素的数量。如果没有定制Map供应商,则地图的类型是不确定的,因此在此无法声明。

实际上,可以合理地假设结果将是某种O(1)默认情况下具有净查找复杂性的某种哈希映射。因此O(n),分组的净时间复杂度为。然后,我们有了 下游
收集器。

默认的 下游 收集器是toList(),它会产生未指定的List类型,因此,再说一遍,关于添加元素的成本我们无能为力。

当前的实现产生一个ArrayList,当超出容量时必须执行复制操作,但是由于每次都会将容量提高一个 因数 ,因此O(n)添加 n个
元素仍然存在净复杂性。可以合理地假设,将来对toList()实现进行更改不会使成本比我们今天要差。因此,默认groupingBy集合的时间可能很复杂O(n)

如果我们将自定义Map收集器与自定义下游收集器一起使用,则复杂度取决于平均组数与每个组中元素的数量之比。最坏的情况是地图查找和下游收集器的元素处理(元素数量的乘积)中的最坏情况,因为我们可以有一个包含所有项目的组,或者每个项目都在自己的组中。

但是通常,您能够预测特定分组操作的偏差,因此,您将希望计算该特定操作的时间复杂度,而不是通常依赖于所有分组操作的声明。



 类似资料:
  • 我在流中使用分组: 1:我想知道如何在Collect方法中使用“Grouping By”两次。 2:其次,在分组中定义退货类型的策略是什么? 1: 错误消息: 1:线程“main”java中出现异常。RuntimeException:不可编译的源代码-不兼容的类型:推理变量D具有不兼容的等式约束。字符串,java。lang.Integer在collectorsinjava。收藏家辛加瓦。main(

  • 问题内容: 这给出了预期的结果 这有效 但是如果我们将其更改为 我收到“ TypeError:无法将复数转换为浮点数”。 如果现在我们省略显式的,我将得到“ ValueError:设置具有序列的数组元素”。 有人可以解释发生了什么,以及如何做到无误吗?我迷路了。 问题答案: 要插入complex或in ,您显然需要将其视为数组,因此可以将其索引或分配给的一个切片: 看来NumPy无法正确处理这种情

  • 我最近刚开始使用API和http请求,我正试图构建一个应用程序,使用Reddit API在特定的子编辑上拉帖子。 这是我正在练习的带有json和搜索参数的页面:https://www.reddit.com/r/hiphopheads.json?limit=1 查看Golang的JSON模块的标准库,我仍然不知道如何使用JSON。解组此复杂JSON。根据我收集到的信息,我必须定义一个类似于JSON结

  • 主要内容:GWT 复杂组件 介绍,GWT 常用的复杂组件GWT 复杂组件 介绍 表单小部件允许用户与应用程序进行高级交互功能。每个 Complex 小部件都从 Widget 类继承属性,而 Widget 类又从 UIObject 继承属性。 小组件 描述 GWT UIObject类 此小部件包含文本,不会使用 <div> 元素将其解释为 HTML,从而使其以块布局显示。 GWT Widget类 此小部件可以包含 HTML 文本并使用 <div> 元素显

  • 我在谷歌工作表中工作,数据通过谷歌应用程序脚本从NPM中提取。我在尝试提取数据并获取下载计数的时间段上进行迭代。我正在尝试创建一个图表,显示

  • 当用户搜索租赁时,他可能还想将搜索范围缩小到特定城市。虽然我们的初始租赁列表组件仅显示租赁信息,但此新的过滤器组件还将允许用户以过滤条件的形式提供输入。 首先,让我们生成新的组件list-filter。我们的需求是希望组件根据用户输入过滤租赁列表。 $ ember g component list-filter installing component create app/component