You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala 3中序列的isEmpty操作是否比length == 0更快?

Scala 3中isEmpty与seq.length == 0的性能对比

对于Scala 3里的List(比如你定义的val seq = List(1,8,9)),seq.isEmpty确实比seq.length == 0快得多,而且实现逻辑完全符合你的预期。

核心差异

  • isEmpty是O(1)操作:List作为链表结构,isEmpty只需要判断当前实例是否为Nil(空链表的唯一标识),一次匹配就能得到结果,不需要遍历任何元素。
  • length == 0是O(n)操作:List的length方法需要遍历整个链表的所有元素来计数,哪怕只是判断是否为0,也得把整个链表走一遍。如果链表很长,这个操作的耗时会急剧增加。

Scala 3中List的核心实现逻辑

isEmpty的简化实现:

def isEmpty: Boolean = this match {
  case Nil => true
  case _ :: _ => false
}

length的简化实现:

def length: Int = {
  var count = 0
  var current = this
  while current != Nil do
    count += 1
    current = current.tail
  count
}

扩展说明

不止List,Scala中绝大多数集合类型的isEmpty都是O(1)操作。哪怕是像Vector这种length本身也是O(1)的集合,用isEmpty仍然是更直观、更符合语义的写法——它能明确表达“判断是否为空”的意图,避免不必要的歧义。

内容的提问来源于stack exchange,提问作者halloleo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 19:42:08