[英]Understand interface Map<K,V>
我正在学习地图数据结构,我无法理解地图界面中的entrySet() Set<Map.Entry<K,V>>
。 这应该是嵌套的自我引用吗? 供参考,以下摘录自java.util.Map<K,V>
接口的定义:
public interface Map<K,V> {
Set<Map.Entry<K,V>> entrySet();
...
}
这应该是嵌套的自我引用吗?
否。它只是说,作为此方法结果返回的Map
必须是一个对象实例,该对象实例必须遵守Set
接口,该接口反映此Map
条目的内容。 与.keySet()
相同。
两者都是Set
是有道理的,因为Map
中的条目是唯一的( 由于Map.Entry
的.equals()
/ .hashCode()
定义了协定 ),键也是如此(但对于键, 您有责任确保.equals()
/ .hashCode()
)。
但是,您必须要小心。 对于这两种方法,javadoc都说:
该集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。
如果您不小心,这可能会带来麻烦。
看这个例子:
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);
}
结果:
after removing entry: {hello=world}
after removing key: {}
Set<Map.Entry<K,V>>
上面的类型表示:一组地图条目。 Map.Entry
是嵌套在Map
接口内部的接口。 没有自引用,但是从entrySet
返回的集合的类型重用了包含映射的<K,V>
类型绑定。
一个映射条目是一对(键,值),并且整个映射在概念上只是一组映射条目。 地图的此视图非常适合在地图的整个内容上进行迭代的用例,但不适用于通过键进行检索,这是地图的主要用例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.