代码之家  ›  专栏  ›  技术社区  ›  Peter Å tibraný

google集合不可变映射迭代顺序

  •  23
  • Peter Å tibraný  · 技术社区  · 14 年前

    我需要谷歌收藏的组合 ImmutableMap LinkedHashMap -具有定义的迭代顺序的不可变映射。似乎不变映射本身已经定义了迭代顺序,至少 its documentation says :

    具有可靠的用户指定迭代顺序的不可变、基于哈希的映射。

    但是没有更多的细节。快速测试表明这可能是真的,但我想确定一下。

    我的问题是:我能依赖不变映射的迭代顺序吗?如果我愿意的话 ImmutableMap.copyOf(linkedHashMap) ,它是否具有与原始链接哈希图相同的迭代顺序?构建器创建的不可变映射怎么办?一些权威答案的链接会有所帮助,因为谷歌没有发现任何有用的东西。(不,指向源的链接不算数)。

    3 回复  |  直到 6 年前
        1
  •  20
  •   Jared Levy    14 年前

    更精确地说,不变映射工厂方法和生成器返回的实例遵循构造映射时提供的输入的迭代顺序。但是,一个不可变的ortedmap,它是不可变映射的一个子类。对键排序。

        2
  •  23
  •   Peter Å tibraný    14 年前

    我已经找到了关于这个的讨论, answers from library authors :

    Kevin Bourrillion:“用户指定”的意思是“它可以是你想要的任何订单。” 也就是说,无论您在 首先,这是我们使用的顺序。

    JaredLevy:你也可以复制一个具有所需顺序的treemap或linkedhashmap。

    是的,我应该相信JavaDoc,尽管我认为JavaDoc在这种情况下会更好。似乎我不是第一个被它迷惑的人。如果没有其他问题,这个问答将有助于谷歌下次搜索“不变地图迭代”:-)

        3
  •  5
  •   nanda    14 年前

    你应该相信JavaDoc。如果还不够,请阅读源代码或报告错误。

    对源代码的快速查看显示,映射由数组支持,迭代将通过数组支持的不可变集完成。所以我认为文档是正确的,元素的顺序将保持不变。