【问题标题】:I need an immutable key-value structure that retains insertion order我需要一个保留插入顺序的不可变键值结构
【发布时间】:2013-02-05 15:06:30
【问题描述】:

我想在 Guava 库中找到类似 ImmutableLinkedHashMap<> 的东西。 我需要使用带有插入顺序的不可变键值数据结构。 那么,我应该使用什么?

【问题讨论】:

标签: java guava immutability linkedhashmap


【解决方案1】:

我不确定我是否完全理解您所追求的,但如果它是一个真正不可变的Map,您可能想看看ImmutableMap

如文档中所述:

一个不可变的、基于散列的Map,具有可靠的用户指定的迭代顺序。不允许空键或空值。

Collections.unmodifiableMap(java.util.Map<? extends K, ? extends V>) 不同,Collections.unmodifiableMap(java.util.Map<? extends K, ? extends V>) 是一个仍然可以更改的单独地图的视图,ImmutableMap 的实例包含自己的数据并且永远不会更改。 ImmutableMap 方便 public static final 映射(“常量映射”),还可以让您轻松制作调用者提供给您的班级的映射的“防御性副本”

例如,您可以以类似的方式使用它:

Map<Integer, String> m = ImmutableMap.of(5,"Five",6,"Six",7,"Seven");

希望这就是你所追求的。

【讨论】:

  • 是的,我也正要这么说。 ImmutableMap 看起来应该可以了。
  • 这个问题是ImmutableSortedMap扩展了ImmutableMap,所以如果你有这种方法的客户,你不能强制按类型维护插入订单。
【解决方案2】:

首先创建一个LinkedHashMap,然后使用ImmutableMap.copyOf(linkedHashMap) 创建一个与原始地图具有相同顺序的不可变副本。

【讨论】:

    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2010-10-14
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    相关资源
    最近更新 更多