用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 hereSet<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