我正在学习地图数据结构,我无法理解地图界面中的entrySet() Set<Map.Entry<K,V>>
。 这应该是嵌套的自引用吗?作为参考,这是java.util.Map<K,V>
接口定义的摘录:
public interface Map<K,V> {
Set<Map.Entry<K,V>> entrySet();
...
}
答案 0 :(得分:5)
这应该是嵌套的自引用吗?
没有。它只表示无论Map
返回什么,因为此方法的结果必须是服从Set
接口的对象实例,它反映了此Map
条目的内容。它与.keySet()
相同。
因为Set
中的条目都是唯一的(as a result of the defined contract for Map.Entry
's .equals()
/.hashCode()
),所以密钥都是唯一的(但是对于密钥,你} em>负责确保尊重Map
/ .equals()
。
但是,你必须要小心。对于这两种方法,javadoc说:
集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。
如果你不小心,这可能会带来麻烦。
看看这个例子:
.hashCode()
结果:
public static void main(final String... args)
{
final Map<String, String> map = new HashMap<>();
map.put("hello", "world");
map.put("foo", "bar");
// Create a map entry
final Map.Entry<String, String> entry
= new AbstractMap.SimpleEntry<>("foo", "bar");
// Remove it from the set
map.entrySet().remove(entry);
System.out.println("after removing entry: " + map);
// Remove a key
map.keySet().remove("hello");
System.out.println("after removing key: " + map);
}
答案 1 :(得分:1)
Set<Map.Entry<K,V>>
上述类型表示:一组地图条目。 Map.Entry
是嵌套在Map
接口内的接口。没有涉及自引用,但从entrySet
返回的集合的类型重用了包含映射的<K,V>
类型绑定。
地图条目是对(键,值),整个地图在概念上只是一组地图条目。这个地图视图非常适合迭代对地图的完整内容的用例,但不适合按键检索,这是地图的主要用例。 / p>