用Map.ofEntries()代替Map.of()有什么用

从Map.java的文档中-

Map.of()Map.ofEntries()静态工厂方法提供了一种方便的方法来创建不可改变的地图。

但是当我已经可以使用重载方法时 …

Map.of("k1","v1","k2","v2","k3","v3"...);

… Map.ofEntries的用途是什么

返回一个不变的映射,其中包含从给定条目提取的键和值,并且条目本身未存储在映射中。

回答:

__

关于如何创建包含26个元素的Map的任何猜测?

您已链接的Map中的两个工厂方法之间的主要区别是:

返回一个不变的映射,其中包含从给定 提取的键和值(不受计数限制)

JEP-269:便利工厂收集方法

对于大量条目,将提供一个API,该API将在给定 情况下创建Map实例:

Map.ofEntries(Map.Entry<K,V>...)

尽管此方法类似于List和Set的等效varargs

API,但不幸的是,它要求将每个键值对都装箱。适用于静态导入的将键和值装箱的方法将使此操作更加方便:

Map.Entry<K,V> entry(K k, V v)


您对.of()Map中的方法的假设有些不正确,可能是因为它可以用Java9编译:

List<Integer> values = List.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // note 11 elements here

Set<String> keys = Set.of("z", "o", "tw", "th", "fo", "fi", "si", "se", "e", "n", "te");

另一方面,这不会:

Map<String, Integer> map = Map.of("z", 0, "o", 1,

"tw", 2, "th", 3, "fo", 4, "fi", 5,

"si", 6, "se", 7, "e", 8, "n", 9, "te", 10); // this would not compile

这样做的原因是因为有一个varargs实现

但是要为Map键和值创建一个类似的API,也应该按照JEP中的说明进行装箱。因此,使用类型

为varargs的相同对象创建为:

Map<String, Integer> map = Map.ofEntries(Map.entry("z",0),

Map.entry("o",1),Map.entry("t",2)...so on);


此外, 自9以来 ,其文档Map.entry()也有所介绍- __

返回一个Map.Entry包含给定键和值的不可变值。这些条目适用于使用Map.ofEntries()方法填充Map实例 。

Entry通过此方法创建的实例具有以下特征:

  • 它们不允许空键和值。尝试使用空键或空值创建它们会导致NullPointerException。

  • 它们是不可变的。在UnsupportedOperationException中返回的Entry结果上对Entry.setValue()的调用。

  • 它们不可序列化。

*

它们是基于价值的。调用者不应对返回实例的身份做任何假设。此方法可以自由创建新实例或重用现有实例。因此,在这些实例上的身份敏感操作(引用相等(==),身份哈希码和同步)不可靠,应避免。

与最近介绍的

不可变地图静态工厂方法

的特征相似。

以上是 用Map.ofEntries()代替Map.of()有什么用 的全部内容, 来源链接: utcz.com/qa/436086.html

回到顶部