当前位置: 首页 > 面试题库 >

JavaConverters asScala方法的时间复杂度

郎雪风
2023-03-14
问题内容

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

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

这是一个可爱的小功能,因为它允许与现有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会产生原始集合,而不是双重包装。



 类似资料:
  • 问题内容: 我写了以下课程: 然后,在我的方法中,我创建了一个,向其中添加了一些具有“ X”和“ angle”字段的对象。 然后,我使用: 这种排序方法的复杂性是什么? 问题答案: 您可能已经阅读了有关Collections排序的文档,但是这里适合您: 排序算法是一种修改的mergesort(如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。该算法提供了有保证的n log(n)性能。

  • 主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内

  • 算法的时间与空间复杂度 看到群里们小伙伴在讨论算法复杂度问题,之前在极客时间看了王争的《数据结构与算法之美》,看的我也晕呼呼的,跟上学时在学校老师的讲的有点不一样了,网上搜了下各种各样的,结合参考作一篇简单易懂的总结。 什么是算法 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 如何评价一个算法的好坏 一般我们会从以下维度来评估算法的优劣 正确性

  • 下面是我写的一些伪代码,给定一个数组A和一个整数值k,如果与k之和中有两个不同的整数,则返回true,否则返回false。我正试图确定这个算法的时间复杂度。 我猜这个算法在最坏的情况下的复杂度是O(n^2)。这是因为第一个for循环运行n次,该循环内的for循环也运行n次。if语句进行一次比较,如果为true,则返回一个值,这两个操作都是常量时间操作。最后的return语句也是一个常数时间操作。

  • 我必须写代码来取一个具有奇数个元素的排序双数组,找到它们之间距离最短的值对,并返回剩余的值,这被认为是“奇数”。以下是我编写的代码,它可以工作并返回正确的值。 有人能帮我找到我使用的算法的时间复杂度吗?我试过了,但真的很困惑。 算法:从数组的第一、第二和第三个元素开始。比较第一和第二元素以及第二和第三元素之间的差异。如果第一个差小于或等于后一个,则将前两个元素设为(-1)。否则,对第二、第三和第四

  • 本文向大家介绍k-means算法的时间空间复杂度?相关面试题,主要包含被问及k-means算法的时间空间复杂度?时的应答技巧和注意事项,需要的朋友参考一下 时间复杂度为O(tmnK) t表示迭代次数,m表示数据个数,表示数据特征维度,K表示类簇数 空间复杂度为O((m+K)*n) m表示数据个数,K表示类簇个数,n表示维度,理解就是需要存储数据点和类中心点