Map.ofEntries() 创建的 Map 的访问时间复杂度是否与 o(1) 的 HashMap 相同?
Is the Access Time Complexity of a Map Created by Map.ofEntries() the Same as HashMap which is o(1)?
我想使用 Java 9 中的新工厂方法 Map.ofEntries()
内联创建一个 不可变 hashMap,例如:
Map<Integer, String> map = Map.ofEntries(
Map.entry(1, "One"),
Map.entry(2, "Two"),
Map.entry(3, "Three"));
然后令我惊讶的是,我发现我不能用同样的方法创建一个不可变的hashMap!例如,以下代码将不起作用。
HashMap<Integer, String> map = HashMap.ofEntries( //not work
Map.entry(1, "One"),
Map.entry(2, "Two"),
Map.entry(3, "Three"));
然后当我想查看工厂方法返回的是什么类型的map时,发现如下note:
Callers should make no assumptions about the identity of the returned instances.
所以我的问题是,不可变映射的访问时间复杂度是否与 o(1) 的 hashMap 相同?如果不是,如何创建一个既不可变又同时访问 o(1) 的映射?最好能内联创建。
可变性或不变性与 Map
中访问操作的复杂性没有直接关系。例如,对于 get()
操作,HashMap
将始终是 O(1)
,而 TreeMap
将是 O(log n)
。 Map
接口的实现class决定了操作的复杂性。
此外,始终可以创建不可修改的映射,因为我们可以使任何 Map
的任何具体类型在我们放置项目后不可变,如下所示:
Map<Integer, String> immutableMap = Collections.unmodifiableMap(mutableMap);
需要明确的是,HashMap.ofEntries()
不会工作,因为 ofEntries()
方法是静态的并且在 Map
接口中定义,而不是在其任何实现中 class es.
而且您不必担心无法将地图类型声明为 HashMap
或其他具体 class,无论如何,最佳做法是将地图声明为 Map
界面.
此外,如果您使用的版本早于 Java 9,并且不介意使用外部库,您可以使用 Guava 中的 ImmutableMap
:
Map<Integer, String> immutableMap = ImmutableMap.of(key1, val1, key2, val2);
也许阅读 this article 会更清楚一些。
我想使用 Java 9 中的新工厂方法 Map.ofEntries()
内联创建一个 不可变 hashMap,例如:
Map<Integer, String> map = Map.ofEntries(
Map.entry(1, "One"),
Map.entry(2, "Two"),
Map.entry(3, "Three"));
然后令我惊讶的是,我发现我不能用同样的方法创建一个不可变的hashMap!例如,以下代码将不起作用。
HashMap<Integer, String> map = HashMap.ofEntries( //not work
Map.entry(1, "One"),
Map.entry(2, "Two"),
Map.entry(3, "Three"));
然后当我想查看工厂方法返回的是什么类型的map时,发现如下note:
Callers should make no assumptions about the identity of the returned instances.
所以我的问题是,不可变映射的访问时间复杂度是否与 o(1) 的 hashMap 相同?如果不是,如何创建一个既不可变又同时访问 o(1) 的映射?最好能内联创建。
可变性或不变性与 Map
中访问操作的复杂性没有直接关系。例如,对于 get()
操作,HashMap
将始终是 O(1)
,而 TreeMap
将是 O(log n)
。 Map
接口的实现class决定了操作的复杂性。
此外,始终可以创建不可修改的映射,因为我们可以使任何 Map
的任何具体类型在我们放置项目后不可变,如下所示:
Map<Integer, String> immutableMap = Collections.unmodifiableMap(mutableMap);
需要明确的是,HashMap.ofEntries()
不会工作,因为 ofEntries()
方法是静态的并且在 Map
接口中定义,而不是在其任何实现中 class es.
而且您不必担心无法将地图类型声明为 HashMap
或其他具体 class,无论如何,最佳做法是将地图声明为 Map
界面.
此外,如果您使用的版本早于 Java 9,并且不介意使用外部库,您可以使用 Guava 中的 ImmutableMap
:
Map<Integer, String> immutableMap = ImmutableMap.of(key1, val1, key2, val2);
也许阅读 this article 会更清楚一些。