Kotlin单元素迭代器的最优高效实现方案问询
Kotlin单元素Iterable实现的效率分析
你需要实现一个Iterable<Any>,仅迭代自身持有的单个value属性值,当前给出的实现代码如下:
override fun iterator(): Iterator<Any> = iterator { return@iterator this.yield(this@ExampleIterable.value) }
这个实现不是最高效的。原因很简单:Kotlin的iterator构建器是基于协程机制实现的,会生成底层状态机来处理挂起、恢复逻辑,对于只返回单个元素的场景来说,这些协程相关的开销完全是冗余的,属于用复杂机制解决简单问题。
如果要追求最高效的单元素迭代器实现,直接手动实现Iterator接口是最优解——逻辑极简,没有任何额外开销:
// 以你的ExampleIterable为例 class ExampleIterable(override val value: Any) : Iterable<Any> { override fun iterator(): Iterator<Any> = object : Iterator<Any> { private var hasElement = true override fun hasNext(): Boolean = hasElement override fun next(): Any { if (!hasElement) throw NoSuchElementException() hasElement = false return value } } }
这个自定义迭代器只维护一个布尔标记,第一次调用next()返回目标值,之后hasNext()永远返回false,完全没有多余的封装或协程开销,是单元素迭代场景下的性能最优解。
当然如果不想手动写迭代器,也可以用listOf(value).iterator(),标准库的单元素列表迭代器也是经过优化的,但相比自定义迭代器还是多了一层集合对象的创建(虽然开销极小),极致性能场景下还是自定义实现更优。
内容的提问来源于stack exchange,提问作者Dan Lugg
相关产品推荐
相关产品推荐

