为什么MutableMap.keys必须返回MutableSet?

时间:2020-03-20 14:45:46

标签: kotlin collections

MutableMap.keys属性定义为:abstract val keys: MutableSet<K>

我知道keys的内容会随着基础图的变化而变化,但是keys本身如何可以被修改? IE:调用map.keys.add(xxx)

时没有逻辑

Rq:我在围绕MutableMap创建代理时遇到了这个问题。我必须调整entrieskeys的内容,但不想实现remove/add/clear方法

2 个答案:

答案 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代码。