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

Java Map.ofEntries()代替Map.of()有什么用,java,hashmap,java-9,Java,Hashmap,Java 9,根据- Map.of()和Map.of entries()静态工厂方法提供了创建不可变映射的方便方法 但是当我已经可以 。。。地图的用途是什么 返回一个不可变映射,其中包含从给定项中提取的键和值,并且项本身不存储在映射中 猜猜你将如何创建一个包含26个元素的地图 地图中已链接的两种factory方法的主要区别在于: 返回一个不可变映射,其中包含从 给定的条目(计数不受限制) 从: 对于较大数量的条目,将提供一个API 在给定任意数量的键值对的情况下创建映射实例: Map.ofEntries(M

根据-

Map.of()
Map.of entries()
静态工厂方法提供了创建不可变映射的方便方法

但是当我已经可以

。。。地图的用途是什么

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

猜猜你将如何创建一个包含26个元素的地图

地图中已链接的两种factory方法的主要区别在于:

返回一个不可变映射,其中包含从 给定的条目(计数不受限制)

从:

对于较大数量的条目,将提供一个API 在给定任意数量的键值对的情况下创建映射实例:

Map.ofEntries(Map.Entry<K,V>...)
另一方面,这不会:

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

此外,还参考了
Map.entry()
的文档,该文档也是从9-

返回包含给定键和值的不可变
Map.Entry
。 这些条目适用于使用
Map.of entries()
方法

通过此方法创建的
条目
实例 具有以下特点:

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

  • 它们是不变的。对返回的条目调用Entry.setValue()会导致UnsupportedOperationException

  • 它们是不可序列化的

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


与最近推出的类似。

很简单
Map.of()
不是varargs方法。最多10个条目只能重载
Map.of()
。另一方面,
Map.ofEntries()
是一个varargs方法,因此允许您指定任意数量的条目


他们本可以只添加
Map.of entries()
,但由于很多时候您只需要几个条目,所以他们还包括
Map.of()
版本是一种方便的方法,因此您无需将每个键值对包装在
条目中

Java 9引入使用简洁的单行代码创建小型不可修改的集合实例,对于地图,工厂方法的签名是:

static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3)
(kk1,v1,kk2,v2,kk3,v3)的静态映射 此方法重载为具有0到10个键值对,例如

Map<String, String> map = Map.of("1", "first");
Map<String, String> map = Map.of("1", "first", "2", "second");
Map<String, String> map = Map.of("1", "first", "2", "second", "3", "third");
Map Map=Map.of(“1”,“第一”);
Map Map=一、一、二、二的地图;
Map Map=地图,共有(“1”、“第一”、“2”、“第二”、“3”、“第三”);
类似地,最多可以有十个条目

对于我们有10多个键值对的情况,有一种不同的方法:

static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries)

静态入口地图(带有该链接的Map.entry看起来像垃圾邮件。我没有发现与这里已经回答的内容和文档中已经链接的内容有多大区别。为什么没有
Map.of()的varargs版本
?@user5047085-键和值可以是不同的类型。在Java中,无法表示强制奇数元素为
K
类型,偶数元素为
V
类型的vararg,因为所有元素都是
Entry
(或者更准确地说,
Entry
Map<String, Integer> map = Map.ofEntries(Map.entry("z",0),
       Map.entry("o",1),Map.entry("t",2)...so on);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3)
Map<String, String> map = Map.of("1", "first");
Map<String, String> map = Map.of("1", "first", "2", "second");
Map<String, String> map = Map.of("1", "first", "2", "second", "3", "third");
static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries)
Map<String, String> map = Map.ofEntries(
  new AbstractMap.SimpleEntry<>("1", "first"),
  new AbstractMap.SimpleEntry<>("2", "second"),
  new AbstractMap.SimpleEntry<>("3", "third"));