MutableMap.keys
属性定义为:abstract val keys: MutableSet<K>
我知道keys
的内容会随着基础图的变化而变化,但是keys
本身如何可以被修改? IE:调用map.keys.add(xxx)
Rq:我在围绕MutableMap创建代理时遇到了这个问题。我必须调整entries
和keys
的内容,但不想实现remove/add/clear
方法
答案 0 :(得分:4)
如果您尝试添加内容,则MutableSet
返回的keys
会抛出UnsupportedOperationException
。它提供了删除和过滤(retainAll
)操作,可以简化不需要考虑值而只考虑键的操作。
如果您已经在使用MutableMap,那么也应该能够以可变的方式直接使用这些键。
答案 1 :(得分:1)
它对应于Java Map#keySet()
方法,该方法记录如下:
返回此映射中包含的键的Set视图。该集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了映射(通过迭代器自己的remove操作除外),则迭代的结果不确定。 集合支持元素删除,该元素通过Iterator.remove,Set.remove,removeAll,retainAll和clear操作从映射中删除相应的映射。不支持add或addAll操作。
加粗的部分解释了为什么在Kotlin中将其表示为MutableSet
;否则,您将无法使用这些功能来移植Java代码。