Map和Map.Entry <k,v>接口之间的区别

时间:2016-08-21 14:55:02

标签: java

MapMap.Entry<K,V>界面之间有什么区别(如果有的话),Map.Entry<K,V>界面的目的是什么?

2 个答案:

答案 0 :(得分:3)

b.a接口描述了存储键值条目的数据结构。 Map接口描述了这些条目的结构,存储并提供了一种检索关联键和值的方法(取决于实现)。

这些接口由实现接口描述的功能的具体类实现。

地图文档:https://docs.oracle.com/javase/8/docs/api/java/util/Map.html

Map.Entry docs:https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html

答案 1 :(得分:-1)

界面 Map.Entry 公共静态接口 Map.Entry 一个映射条目(键值对)。 Map.entrySet 方法返回地图的集合视图,其元素属于此类。获取映射条目引用的唯一方法是从此集合视图的迭代器中获取。这些 Map.Entry 对象仅在迭代期间有效;更正式地说,如果在迭代器返回条目后修改了后备映射,则映射条目的行为是未定义的,除非通过对映射条目的 setValue 操作。 自从: 1.2

接口图 类型参数: K - 此映射维护的密钥类型 V - 映射值的类型 所有已知的子接口: 绑定、ConcurrentMap、ConcurrentNavigableMap、LogicalMessageContext、MessageContext、NavigableMap、SOAPMessageContext、SortedMap 所有已知的实现类: AbstractMap、属性、AuthProvider、ConcurrentHashMap、ConcurrentSkipListMap、EnumMap、HashMap、Hashtable、IdentityHashMap、LinkedHashMap、PrinterStateReasons、Properties、Provider、RenderingHints、SimpleBindings、TabularDataSupport、TreeMap、UIDefaults、WeakHashMap

公共接口 Map 将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射到一个值。 这个接口代替了 Dictionary 类,它是一个完全抽象的类,而不是一个接口。

Map 界面提供了三个集合视图,允许将地图的内容视为一组键、一组值或一组键值映射。地图的顺序定义为地图集合视图上的迭代器返回其元素的顺序。一些地图实现,如 TreeMap 类,对它们的顺序做出特定保证;其他的,比如 HashMap 类,没有。

注意:如果将可变对象用作映射键,则必须非常小心。如果对象的值以影响等于比较的方式更改,而对象是映射中的键,则不会指定映射的行为。此禁令的一个特殊情况是不允许映射将自身包含为键。虽然允许映射将自身包含为值,但建议格外小心:在此类映射上不再明确定义 equals 和 hashCode 方法。

所有通用地图实现类都应该提供两个“标准”构造函数:一个 void(无参数)构造函数,它创建一个空地图,一个带有 Map 类型的单个参数的构造函数,它创建一个具有相同参数的新地图。键值映射作为其参数。实际上,后一个构造函数允许用户复制任何映射,生成所需类的等效映射。没有办法强制执行此建议(因为接口不能包含构造函数),但 JDK 中的所有通用映射实现都符合要求。

此接口中包含的“破坏性”方法,即修改它们操作的地图的方法,如果此地图不支持该操作,则指定抛出 UnsupportedOperationException。在这种情况下,如果调用对地图没有影响,则这些方法可能(但不是必需)抛出 UnsupportedOperationException。例如,如果要“叠加”映射的映射为空,则在不可修改的映射上调用 putAll(Map) 方法可能(但不是必需)抛出异常。

某些地图实现对它们可能包含的键和值有限制。例如,有些实现禁止空键和值,有些实现对其键的类型有限制。尝试插入不合格的键或值会引发未经检查的异常,通常为 NullPointerException 或 ClassCastException。尝试查询不合格的键或值的存在可能会引发异常,或者可能只是返回 false;一些实现会表现出前一种行为,而另一些会表现出后者。更一般地,尝试对不合格的键或值执行操作,其完成不会导致不合格的元素插入到映射中,可能会引发异常,也可能会成功,具体取决于实现的选择。此类异常在此接口的规范中标记为“可选”。

Collections Framework 接口中的许多方法都是根据 equals 方法定义的。例如, containsKey(Object key) 方法的规范说:“当且仅当此映射包含键 k 的映射使得 (key==null ? k==null : key.equals(k) )”本规范不应被解释为暗示使用非空参数键调用 Map.containsKey 将导致为任何键 k 调用 key.equals(k)。实现可以自由地实现优化,从而避免 equals 调用,例如,通过首先比较两个键的哈希码。 (Object.hashCode() 规范保证哈希码不相等的两个对象不能相等。)更一般地说,各种集合框架接口的实现可以自由地利用底层对象方法的指定行为,只要实现者认为合适.

某些执行映射递归遍历的映射操作可能会失败,但映射直接或间接包含自身的自引用实例除外。这包括 clone()、equals()、hashCode() 和 toString() 方法。实现可以选择处理自引用场景,但大多数当前实现都没有这样做。

该接口是 Java 集合框架的成员。

因为: 1.2

https://docs.oracle.com/javase/8/docs/api/java/util/Map.html https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html