加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala – 用于不可变集合的hashCode缓存

发布时间:2020-12-16 10:04:15 所属栏目:安全 来源:网络整理
导读:似乎不可变的 scala集合不会缓存它们的hashCode计算(针对immutable.HashSet进行测试),而是每次都重新计算它.是否有任何简单的方法来添加此行为(出于性能原因)? 我已经考虑过创建一个执行缓存的immutable.HashSet的子类,但是没有看到任何方法来实现等函数来
似乎不可变的 scala集合不会缓存它们的hashCode计算(针对immutable.HashSet进行测试),而是每次都重新计算它.是否有任何简单的方法来添加此行为(出于性能原因)?

我已经考虑过创建一个执行缓存的immutable.HashSet的子类,但是没有看到任何方法来实现等函数来返回一个缓存对象.尽管可能与授权有关,但这看起来非常难看.

解决方法

我认为在 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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读