JavaConverters asScala方法的时间复杂度

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

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

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

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

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

各种JavaConverters类使用Adapter模式来包装原始Java集合( underlying )并提供Scala接口。 因此,转换和访问转换后的集合在时间上是恒定的( 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会产生原始集合,而不是双包装。