当前位置: 首页 > 知识库问答 >
问题:

spliterator getExactSizeIfKnown vs estimateSize

郝池暝
2023-03-14

这是在我编写自定义< code>Spliterator时出现的。我知道我应该覆盖< code>estimateSize,如果我知道大小,即使是一个近似值。通常,我会的。但是还有< code>getExactSizeIfKnown并且我知道它的默认实现:

default long getExactSizeIfKnown() {
    return (characteristics() & SIZED) == 0 ? -1L : estimateSize();
}

现在,假设我正在处理一个ArrayListSpliterator(我知道它已经存在,这不是重点)。我应该覆盖getExactSizeIfNotn估计大小还是两者兼而有之?

在内部,我猜<code>getExactSizeIfKnown-因为第一个委托给第二个。考虑到理论上我正在使用ArrayListSpliterator,覆盖getExactSizeIfKnown实际上不会让我为一个额外的方法调用付费-绕道GetExactSizIfknow-

共有1个答案

柳韬
2023-03-14

“我应该覆盖getExactSizeIfKnown还是masuriseSize,或者甚至可能两者兼而有之?”的答案是,你必须实现massize,因为它是抽象的。如果您看到原因,还可以重写默认方法 getExactSizeIfKnown

在内部,我猜getExactSizeIfNotn实际上是被调用的,而不是估计大小-因为第一个委托给第二个。

没那么简单。请为调用< code>getExactSizeIfKnown的代码做好准备,因为它可能仅在准确且未检查特征的情况下使用该数字。但同时可能有其他代码调用< code>estimateSize,因为它需要一个估计值,或者因为它将在另一个地方处理特征。事实上,一个调用方有一个< code>default实现,可以在特定条件下委托给另一个调用方,但这并不能说明调用方的任何情况。这些方法有不同的语义。

考虑到理论上我正在处理一个< code > arraylistspliterrator ,不会重写< code>getExactSizeIfKnown实际上只是让我为一个额外的方法调用——迂回< code > getExactSizeIfKnown —

条件调用的伤害可能比委派调用更大,但是如果您的特定拆分器总是返回相同的特征,则 JVM 的优化器可能会消除与此相关的任何开销。因此,这是通常的权衡,在这里,与微小的开发工作相比,这是一个微小的潜在性能优势(用于提供仅返回已知数字的附加方法)。

如果大小的计算不是琐碎的,那么无论如何,您都会以委托结束,因为您不希望重复非平凡的代码。如果您的类设计为<code>大小的

 类似资料:

相关问答

相关文章

相关阅读