如何在Kotlin中优化HashMap?
大家好。 今天我写了下一段代码。 看起来很管用,但我想知道,这是做我想做的事情的正确方式吗。 我有一个HashMap,其中监听器作为键,布尔值作为值,确定:监听器是否已经收到最后一次更新。 我重置HashMap的方法对吗如何在Kotlin中优化HashMap?,kotlin,Kotlin,大家好。 今天我写了下一段代码。 看起来很管用,但我想知道,这是做我想做的事情的正确方式吗。 我有一个HashMap,其中监听器作为键,布尔值作为值,确定:监听器是否已经收到最后一次更新。 我重置HashMap的方法对吗 private val listenersUpdateState: HashMap<WeakReference<IStatusesListener>, Boolean> = HashMap() private fun setAllListenersTo
private val listenersUpdateState: HashMap<WeakReference<IStatusesListener>, Boolean> = HashMap()
private fun setAllListenersToReadyToUpdate() {
listenersUpdateState.keys.forEach { key ->
listenersUpdateState[key] = false
}
}
private val listenersUpdateState:HashMap=HashMap()
private fun setAllListenersToReadyToUpdate()的{
listenersUpdateState.keys.forEach{key->
listenersUpdateState[键]=false
}
}
您可以使用一个方便的功能,如
示例:
private val listenersUpdateState:MutableMap=mutableMapOf()
私有fun setAllListenersToReadyToUpdate()=listenersUpdateState.mapValues{false}
这将有助于避免通过map[key]
关键字一次又一次地索引map,从而提高性能
编辑:
上面的代码用于构造一个新映射,所有值都设置为false,但要重新绘制原始映射的所有值,请参见下面的代码
private fun setAllListenersToReadyToUpdate()=
listenersUpdateState.entries.onEach{it.setValue(false)}
如果您的目标是Java 8或更高版本,您可以使用replaceAll
:
listenersUpdateState.replaceAll { _, _ -> false }
或者,您可以在映射上调用clear()
,当您检索值时,如果值不存在,则默认为false:
fun isUpdated(someRef: WeakReference<IStatusesListener>) = listenersUpdateState[someRef] ?: false
fun已更新(someRef:WeakReference)=listenersUpdateState[someRef]?:false
谢谢。但是Map.mapValues()也会创建新的映射。it.value
是一个val
,不能更改。@Kiskae检查更新的答案,我在更新之前检查了它是否正常工作!一个可能使这一切变得更简单的想法是:使用WeakReference
s的MutableSet
,将它们在集合中的存在视为true
,将它们的缺失视为false
。要重置它,只需清除设置。