Scala默认设置实现
发布时间:2020-12-16 19:21:12 所属栏目:安全 来源:网络整理
导读:我可以从 Scala文档中看到scala.collection.immutable.Set只是一个特征.默认情况下使用Set实现中的哪一个? HashSet或TreeSet(或其他)? 我想知道/计划某些功能的运行时间. 例: scala val s = Set(1,3,6,2,7,1) res0: scala.collection.immutable.Set[Int]
我可以从
Scala文档中看到scala.collection.immutable.Set只是一个特征.默认情况下使用Set实现中的哪一个? HashSet或TreeSet(或其他)?
我想知道/计划某些功能的运行时间. 例: scala> val s = Set(1,3,6,2,7,1) res0: scala.collection.immutable.Set[Int] = Set(1,3) > s.find(5),O(1)或O(log(n))的运行时间是多少? 解决方法
通过查看源代码,您可以发现最多设置四个元素具有EmptySet,Set1,Set2,Set3和Set4提供的优化实现,它们只保存单个值.
例如,这里是Set2声明(从scala 2.11.4开始): class Set2[A] private[collection] (elem1: A,elem2: A) extends AbstractSet[A] with Set[A] with Serializable 这是包含实现: def contains(elem: A): Boolean = elem == elem1 || elem == elem2 或者找到实现 override def find(f: A => Boolean): Option[A] = { if (f(elem1)) Some(elem1) else if (f(elem2)) Some(elem2) else None } 非常直截了当. 对于具有4个以上元素的集合,底层实现是HashSet.我们可以在REPL中轻松验证这一点: scala> Set(1,4).getClass res1: Class[_ <: scala.collection.immutable.Set[Int]] = class scala.collection.immutable.Set$Set4 scala> Set(1,4,5,6).getClass res0: Class[_ <: scala.collection.immutable.Set[Int]] = class scala.collection.immutable.HashSet$HashTrieSet 话虽这么说,find必须总是迭代整个HashSet,因为它是未排序的,所以它将是O(n). Here’s a more in-depth reference一般关于scala集合的性能. 说到地图,几乎相同的概念适用.优化的Map实现最多4个元素,然后它是一个HashMap. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |