Java 链流是否为x*O(N)?

Java 链流是否为x*O(N)?,java,java-stream,time-complexity,Java,Java Stream,Time Complexity,假设集合中的项目保持不变,如果我在执行一些操作后,将一个流链接到另一个流,它们现在是2o(N)吗 对于一个修改过的集合,它现在是O(N)+O(M)吗 //o(n) “foo”、“bar”、“foobar”流 .collect(收集器.partitioning by(s->s.length()>3)); //2O(n)?O(N)+O(M)? “foo”、“bar”、“foobar”流 .collect(收集器.partitioning by(s->s.length()>3)) .得到(真的) .s

假设集合中的项目保持不变,如果我在执行一些操作后,将一个流链接到另一个流,它们现在是2o(N)吗

对于一个修改过的集合,它现在是O(N)+O(M)吗

//o(n)
“foo”、“bar”、“foobar”流
.collect(收集器.partitioning by(s->s.length()>3));
//2O(n)?O(N)+O(M)?
“foo”、“bar”、“foobar”流
.collect(收集器.partitioning by(s->s.length()>3))
.得到(真的)
.stream()
.collect(Collectors.toMap(String::length,Function.identity());

测量时间复杂度时,会删除常数。O(2N)与O(N)相同。 在流的情况下,可以这样看:

for (Item item :items) {
  doSomething1(item);
  doSomething2(item);
}
与此相比:

for (Item item :items) {
  doSomething1(item);
}

for (Item item :items) {
  doSomething2(item);
}

在这两种情况下,时间复杂度都是O(N),其中N是项目的数量。

2*O(N)仍然是O(N)。我不能100%确定这里要问什么。您希望流实现什么其他操作?请注意,流具有相当高的开销(afaik),如果您确实需要速度,则最好使用紧密循环。撇开
排序
,大多数流操作的时间复杂度为O(n)。但这不是浪费内存的理由。第二个操作可以写成
Stream.of(“foo”、“bar”、“foobar”).filter(s->s.length()>3)).collect(collector.toMap(String::length,Function.identity())
不会改变时间复杂度,但速度更快,所需内存更少。
doSomething
令人困惑,因为它可能具有指数复杂度。此外,部分问题与流操作有关。用一个简单的for循环对其进行建模可能会产生误导。