- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
从 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/
从 Scala 版本 2.9 开始,存在一个方便的转换器,可以通过编写如下内容将 java.util.List 和其他集合转换为 Scala 的数据结构: import scala.collectio
我有下面的代码片段。它在 scala 2.11 中带有警告时工作正常 import java.util.{ ArrayList => JAList } val jlist = new
当我尝试运行基于 this example 的代码时,我收到以下警告: warning: object JavaConversions in package collection is depreca
在 scala.collection ,有两个非常相似的对象 JavaConversions和 JavaConverters 。 这两个对象有什么区别? 为什么它们同时存在? 我什么时候想使用其中一种
在 scala.collection ,有两个非常相似的对象 JavaConversions和 JavaConverters 。 这两个对象有什么区别? 为什么它们同时存在? 我什么时候想使用其中一种
我是一名优秀的程序员,十分优秀!