Hen*_*ler 4 caching scala scala-collections
似乎不可变的scala集合不会缓存它们的hashCode计算(针对immutable.HashSet进行测试),而是每次都重新计算它.是否有任何简单的方法来添加此行为(出于性能原因)?
我已经考虑过创建一个执行缓存的immutable.HashSet的子类,但是没有看到任何方法来实现+ etc.函数来返回一个缓存对象.尽管可能与授权有关,但这看起来非常难看.
我认为在Scala中执行此类操作的常用方法是这样的.但是您需要小心,只将不可变对象放入此集合中.这就是为什么Scala的内置集合每次重新计算哈希值的原因.因为即使集合是不可变的,也可能存在可变对象.
object MySet {
def apply[A](elems: A*) = new MySet(Set(elems: _*))
def empty[A] = new MySet(Set.empty[A])
}
class MySet[A](set: Set[A]) extends Set[A] {
def +(elem: A) = new MySet(set + elem)
def -(elem: A) = new MySet(set - elem)
def contains(elem: A) = set.contains(elem)
def iterator = set.iterator
override lazy val hashCode = set.hashCode
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |