Scala中有SoftHashMap吗?

2024-01-05

我知道这个问题是针对java的 https://stackoverflow.com/questions/264582/is-there-a-softhashmap-in-java,但这些实现似乎都不能很好地配合scala.collection.JavaConversions.

我正在寻找简单的东西(例如单个文件,不是整个图书馆)实现SoftHashMap这样它就能很好地与 Scala 配合使用Map(即支持getOrElseUpdate, unzip,剩下的 ScalaMap方法)。


实施灵感来自这个javaWeakHashMap http://www.koders.com/java/fidF6A9D06D716A6B562853A8DA95C43169F4044FC0.aspx?s=idef%3Aconfiguration:

import scala.collection.mutable.{Map, HashMap}
import scala.ref._


class SoftMap[K, V <: AnyRef] extends Map[K, V]
{
  class SoftValue[K, +V <: AnyRef](val key:K, value:V, queue:ReferenceQueue[V]) extends SoftReference(value, queue)

  private val map = new HashMap[K, SoftValue[K, V]]

  private val queue = new ReferenceQueue[V]

  override def += (kv: (K, V)): this.type =
  {
    processQueue
    val sv = new SoftValue(kv._1, kv._2, queue)
    map(kv._1) = sv
    this
  }

  private def processQueue
  {
    while (true)
    {
      queue.poll match
      {   
        case Some(sv:SoftValue[K, _]) => map.remove(sv.key)
        case _ => return
      }
    }
  }


  override def get(key: K): Option[V] = map.get(key) match
  {
    case Some(sv) => sv.get match
      { case v:Some[_] => v
        case None => {map.remove(key); None} }
    case None => None
  }



  override def -=(key: K):this.type =
  {
    processQueue
    map.remove(key)
    this
  }

  override def iterator: Iterator[(K, V)] =
  {
    processQueue
    map.iterator.collect{ case (key, sv) if sv.get.isDefined => (key, sv.get.get) }
  }

  override def empty:SoftMap[K, V] = new SoftMap[K, V]

  override def size = {processQueue; map.size}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala中有SoftHashMap吗? 的相关文章

  • Scala:在运行时获取 mixin 接口

    我需要在运行时从给定的类获取所有接口 全部加载在类加载器中 例如 如果一个类是这样声明的 trait B trait C trait D class A extends B with C with D 我想在运行时获取这些信息 A 取决于
  • Scala 性能问题

    In the 丹尼尔 科泽夸 Daniel Korzekwa 撰写的文章 http blog danmachine com 2011 01 moving from java to scala one year html 他说以下代码的性能
  • EXC_BAD_ACCESS 在使用 Swift 字典评估 NSExpression 后更新它时

    我正在使用字典来评估表达式 当表达式有变量并且字典实际上由 NSExpression 使用时 会发生一些事情 并且在尝试更新字典时我得到 EXC BAD ACCESS 这仅在 iPhone6 中调试时发生 而不是在模拟器而不是 iPhone
  • Java / Scala Future 由回调驱动

    简洁版本 我怎样才能创建一个Promise
  • 如何仅通过一次映射查找来增加给定键的值?

    假设我有一张地图 var inventory mutableMapOf apples to 1 oranges to 2 我想将苹果的数量增加一个 但这不起作用 inventory apples Error 9 4 Variable exp
  • Scala 相当于 Java 的 Number

    我正在尝试为数值域类型构建类型层次结构 例如AYear is an Int 这是一个Number a Percentage is a Double 这是一个Number等等 我需要层次结构以便我可以调用toInt or toDouble关于
  • 使用 Akka 玩 2.5 - 找不到参数超时的隐式值:akka.util.Timeout

    我正在尝试使用 Play 2 5 测试 Akka 但遇到了一个似乎无法解决的编译错误 我正在关注 Play 文档中的此页面 https playframework com documentation 2 5 x ScalaAkka http
  • 使用map.get()时使用java Map.containsKey()是多余的

    一段时间以来 我一直想知道在最佳实践中是否允许避免使用containsKey 方法上java util Map而是对结果进行空检查get 我的理由是 两次查找值似乎是多余的 首先是查找containsKey 然后再次为get 另一方面 大多
  • 如何发现 Scala 远程 Actor 已死亡?

    在 Scala 中 当另一个 远程 actor 终止时 可以通过设置 trapExit 标志并以第二个 actor 作为参数调用 link 方法来通知一个 actor 在这种情况下 当远程参与者通过调用 exit 结束其工作时 第一个参与者
  • 如何捕获 Oozie Spark 输出

    有没有办法捕获spark的输出然后将其输入到shell上 我们当前正在使用 scala 创建 jar 文件 并希望我们的 Spark 输出成为 shell 输入 我的想法是使用 wf actionData spark XXXX var 我只
  • 不支持的身份验证令牌,仅当禁用身份验证时才允许 schema='none':{ schema='none' } - Neo4j 身份验证错误

    我正在尝试使用 neo4j spark connector 从 Spark 连接到 Neo4j 当我尝试连接到 Neo4j 时遇到身份验证问题org neo4j driver v1 exceptions AuthenticationExce
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • Play Framework 2.3 (Scala) 中的自定义 JSON 验证约束

    我设法使用自定义约束实现表单验证 但现在我想对 JSON 数据执行相同的操作 如何将自定义验证规则应用于 JSON 解析器 示例 客户端的 POST 请求包含用户名 username 我不仅要确保该参数是非空文本 而且还要确保该用户确实存在
  • Spark Scala 将列从一个数据帧复制到另一个数据帧

    我有一个原始数据框的修改版本 我在其上进行了聚类 现在我想将预测列恢复为原始 DF 索引没问题 因此匹配 我该怎么做 使用这段代码我得到一个错误 println Predicted dfWithOutput show println Ori
  • 对 Scala Not Null 特征的库支持

    Notice 从 Scala 2 11 开始 NotNull已弃用 据我了解 如果您希望引用类型不可为空 则必须混合魔法NotNull特征 编译器会自动阻止你输入null 可以值在里面 看到这个邮件列表线程 http www nabble
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • Scala 特性:val/def 和 require

    下面的代码抛出IllegalArgumentException trait T val x Long require x gt 0 object T extends App val y new T val x 42L 而以下情况则不然 tr
  • 分析 sbt 构建

    我的 sbt 构建需要很长时间 它又大又复杂 很难知道从哪里开始清理 看起来 sbt 保留了很多关于构建结构的元数据 包括相互依赖关系 命名任务 范围界定等 有了所有这些元数据 似乎很容易跳入并测量每个不同任务 及其范围 花费的时间 在代码
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • Erlang dict的时间复杂度

    我想知道 Erlang OTP 是否dict模块是作为哈希表实现的 在这种情况下它是否能提供这样的性能 平均情况 Search O 1 n k Insert O 1 Delete O 1 n k 最坏的情况下 Search O n Inse

随机推荐

  • 如何使用 Google 日历 v3 访问其他用户的日历?

    我正在使用 Google Calendar v3 API 和 google apps 并且希望使用单个 oauth2 凭据来确定哪些用户在任何给定点有空 忙碌 我想用这个 https developers google com google
  • Javascript模拟在输入框中按Enter键

    我似乎对一个问题有一个简单的解决方案 但在网上尝试了大量不同的解决方案后 似乎没有什么对我有用 我有一个搜索字段 每次您在输入字段中键入或按 Enter 键时都会搜索数据表 但是在加载页面时为搜索框分配一个值后 它不会执行搜索 直到用户在输
  • 为什么无论我输入什么网址(可爬行的 GWT 应用程序),HTMLUnit 总是显示 HostPage?

    这是完整的代码 public class CrawlServlet implements Filter public static String getFullURL HttpServletRequest request StringBuf
  • 高效的 XMPP 用户搜索

    我想有效地检查所有本地地址簿联系人 如果他们有 jabber 帐户 用户使用手机号码在XMPP服务器上注册 我当前将以下 XEP 0055 节发送到 ejabberd 服务器并评估结果
  • 容器之间的连接被拒绝

    我尝试将运行 spring boot 2 应用程序的容器链接到运行 mongo 的容器 但连接被拒绝 docker compose 文件有一个 mongo 容器 稍后也会在此处添加另一个用于 spring boot 的容器 version
  • 如何识别这些图像中字母的颜色?

    我在用本文 https code msdn microsoft com windowsdesktop Solving Captcha with C dadf37cd解决验证码问题 它的工作原理是使用 AForge 从图像中删除背景 然后将
  • 如何在 JavaScript 中创建 url 预览?

    有人可以帮助我在 JavaScript 中创建 url 预览吗 我的意思是这样的 假设我的网站上有一个链接 我希望用户能够将鼠标悬停在该链接上 并弹出一个图像 显示链接目标的外观 不用担心 CSS 我已经可以正常工作了 我只需要实际的脚本来
  • 为什么我的 C# 程序在分析器中速度更快?

    我有一个相对较大的系统 到目前为止约 25000 行 用于监视无线电相关设备 它使用最新版本的 ZedGraph 显示图表等 该程序是在Win7下的VS2010上使用C 编写的 问题是 当我从 VS 中运行该程序时 它运行缓慢 当我从构建的
  • Excel VBA 查询访问失败

    我正在尝试使用 VBA 从 excel 查询访问文件 但出现错误rs Open queryStatement conn adOpenStatic adLockOptimistic 错误是 运行时错误 2147217904 80040e10
  • Visual Studio 2012 上的 vc++ 项目缺少 mfc110ud.dll

    我使用VS 2012 IDE在vc 中编写了一个vc 项目 它在我的系统中运行良好 当我尝试在其他系统 其中没有 VS2012 上运行时 我们收到 MFC110ud dll 丢失 错误 第一张图片 我尝试手动放置该 dll 但它说非法使用
  • 将函数添加到枚举

    是否可以在 TypeScript 中向 Enum 类型添加函数 例如 enum Mode landscape portrait the dream toString console log this Or class ModeExtensi
  • Lambda 表达式用于访问一个对象的属性,该属性是 C# 中另一个对象的属性

    我有这两门课 public class Contratos public int EntidadeFinanceiraId get set Column Nome public EntidadesFinanceiras entidadeFi
  • ITL(iTunes 库)格式

    我正在开发一个用于管理 iTunes 库 ITL 文件 的 Java 解决方案 ITL 格式是一种专有格式 我正在寻找有关 ITL 格式的实现或文档 但 Google 找不到任何有用的东西 有人有这方面的经验吗 在哪里可以找到更多信息 提前
  • jquery 有等价的 dojo.hitch() 吗?

    原谅我的无知 因为我对 jquery 不太熟悉 有没有相当于道场 hitch http dojotoolkit org reference guide 1 7 dojo hitch html 它返回一个保证在给定范围内执行的函数 编辑 根据
  • ReactJS:如何从另一个组件更新组件

    我正在尝试写一个简单的textarea字符计数器小部件ReactJS http facebook github io react 学习如何使用它 但我现在知道如何通过火来设定价值textarea onChange event 这就是我编写应
  • jQuery 获取选择选项的名称

    我有一个包含多个选项的下拉列表 每个选项都有一个名称属性 当我选择一个选项时 需要出现不同的复选框列表 当选择另一个选项时 该复选框列表应该消失并显示另一个复选框 我创建了这些复选框列表 并为它们提供了一个与所选选项的名称属性相关的 ID
  • 获取“[object HTMLDivElement]”而不是其内容?

    我只想创建原始副本divs 位于一个带有一个案例的新 div 中 Case 1 复制那些具有favouriteid 的新 div 内的类fav items 我已经尝试过 我都尝试过innerHTML and appendChild 方法 当
  • 如何将多个jar添加到groovyConole/groovysh的类路径中?

    我不得不问这个问题 这感觉很荒谬 但我似乎无法将多个 jar 文件添加到 groovyConsole 和 groovysh 的类路径中 如何将多个 jar 文件添加到类路径 这是我尝试过的 groovyConsole cp lib comp
  • Sequelize - 如何仅返回数据库结果的 JSON 对象?

    所以我想要返回数据库结果而不是其他 目前我正在返回一大块 JSON 数据 如下所示 但我只需要 dataValues 属性 我不想使用这一点JSON检索它 tagData 0 dataValues tagId 我刚刚注意到 当它发现并且不创
  • Scala中有SoftHashMap吗?

    我知道这个问题是针对java的 https stackoverflow com questions 264582 is there a softhashmap in java 但这些实现似乎都不能很好地配合scala collection