Java 8 中的流和集合有什么区别
2022-09-01 07:26:35
我正在学习Java 8中的Streams。我对这个概念感到困惑:
集合是一种内存中的数据结构,它保存数据结构当前具有的所有值 - 必须先计算集合中的每个元素,然后才能将其添加到集合中。相比之是概念上固定的数据结构,其中元素是按需计算的。
我不明白,集合如何仅保存必须计算的值,然后才能将其添加到集合中?另外,将流与固定数据结构进行比较意味着什么?
我正在学习Java 8中的Streams。我对这个概念感到困惑:
集合是一种内存中的数据结构,它保存数据结构当前具有的所有值 - 必须先计算集合中的每个元素,然后才能将其添加到集合中。相比之是概念上固定的数据结构,其中元素是按需计算的。
我不明白,集合如何仅保存必须计算的值,然后才能将其添加到集合中?另外,将流与固定数据结构进行比较意味着什么?
您没有提供报价的来源,因此让我向您引用javadoc:
流在几个方面与集合不同:
- 无存储。流不是存储元素的数据结构;相反,它通过计算操作管道从源(如数据结构、数组、生成器函数或 I/O 通道)传达元素。
- 功能性。对流的操作会生成结果,但不会修改其源。例如,筛选从集合中获取的元素会生成一个没有筛选元素的新元素,而不是从源集合中删除元素。
Stream
Stream
- 懒惰寻求。许多流操作(如过滤、映射或重复删除)可以延迟实现,从而暴露出优化的机会。例如,“查找具有三个连续元音的第一个元音”不需要检查所有输入字符串。流操作分为中间(生产)操作和终端(价值或副作用产生)操作。中间操作总是懒惰的。
String
Stream
- 可能是无限的。虽然集合的大小有限,但流不需要。短路操作(如 或 可以允许无限流的计算在有限的时间内完成)。
limit(n)
findFirst()
- 耗材。在流的生命周期中,流的元素只访问一次。就像 一个 ,必须生成一个新的流来重新访问源的相同元素。
Iterator
相反,集合
是对象(元素)的容器。无法从集合中获取(检索)对象,除非该对象以前已添加到集合中。