繁体   English   中英

了解界面图<K,V>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM