gpt4 book ai didi

java - JavaConverters asScala 方法的时间复杂度

转载 作者:太空狗 更新时间:2023-10-29 22:54:22 25 4
gpt4 key购买 nike

从 Scala 版本 2.9 开始,存在一个方便的转换器,可以通过编写如下内容将 java.util.List 和其他集合转换为 Scala 的数据结构:

import scala.collection.JavaConverters._
def scalaVersion = callJavaMethod.asScala

这是一个可爱的小功能,因为它允许人们在与现有 Java 代码交互时利用 Scala 的优势。

但是,我不确定所涉及的时间和空间复杂度,并且在官方文档中找不到任何内容,因此,以下问题:

从哪里可以获得有关 JavaConverter 的复杂性(时间和空间)的信息?

最佳答案

各种 JavaConverters 类正在使用 Adapter包装原始 Java 集合(底层)并提供 Scala 接口(interface)的模式。因此,转换和访问转换后的集合在时间上都是恒定的 (O(1)),只引入了很小的开销。

例如,这是 JListWrapper 的完整源代码:

case class JListWrapper[A](val underlying : java.util.List[A]) extends mutable.Buffer[A] {
def length = underlying.size
override def isEmpty = underlying.isEmpty
override def iterator : Iterator[A] = underlying.iterator
def apply(i : Int) = underlying.get(i)
def update(i : Int, elem : A) = underlying.set(i, elem)
def +=:(elem : A) = { underlying.subList(0, 0).add(elem) ; this }
def +=(elem : A): this.type = { underlying.add(elem); this }
def insertAll(i : Int, elems : Traversable[A]) = { val ins = underlying.subList(0, i) ; elems.seq.foreach(ins.add(_)) }
def remove(i : Int) = underlying.remove(i)
def clear = underlying.clear
def result = this
}

另请注意,将 Java 集合转换为 Scala,然后再转换回 Java 会生成原始集合,而不是双重包装器。

关于java - JavaConverters asScala 方法的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8517636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com