据我了解的变化。
这个想法是对于没有O(1) (constant) size
的集合。然后,sizeIs
可以更有效,特别是与小值的比较(如评论中的 1 )。
但为什么?
简单,因为不是计算所有大小然后进行比较,而是sizeIs
返回一个对象,该对象在计算比较时可以提前返回。
例如,让我们检查代码
def sizeCompare(otherSize: Int): Int = {
if (otherSize < 0) 1
else {
val known = knownSize
if (known >= 0) Integer.compare(known, otherSize)
else {
var i = 0
val it = iterator
while (it.hasNext) {
if (i == otherSize) return if (it.hasNext) 1 else 0 // HERE!!! - return as fast as possible.
it.next()
i += 1
}
i - otherSize
}
}
}
因此,在评论的例子中,假设一个非常非常长的三个元素的列表。sizeIs > 1
一旦知道List至少有一个元素和. 就会返回hasMore
。因此,节省了遍历其他两个元素以计算大小为 3 然后进行比较的成本。
请注意:如果集合的大小大于比较值,则性能将大致相同(可能比仅size
由于每个周期的额外比较而慢)。因此,我只建议将其用于与小值进行比较,或者当您认为这些值将小于集合时。