Google Collections ImmutableMap迭代订单

时间:2010-09-28 07:56:25

标签: java iteration guava

我需要Google Collection ImmutableMapLinkedHashMap的组合 - 具有已定义迭代顺序的不可变地图。似乎ImmutableMap本身实际上定义了迭代顺序,至少its documentation says

  

基于散列的不可变Map,具有可靠的用户指定迭代顺序。

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

我的问题是:我可以依赖ImmutableMap的迭代顺序吗?如果我ImmutableMap.copyOf(linkedHashMap),它是否与原始链接哈希映射具有相同的迭代顺序?构建器创建的不可变映射怎么样?一些权威答案的链接会有所帮助,因为谷歌没有找到任何有用的东西。 (不,与来源的链接不计算在内。)

3 个答案:

答案 0 :(得分:25)

我实际上已经使用answers from library authors

找到了对此的讨论
  

Kevin Bourrillion:“用户指定”的含义是“它可以是您想要的任何顺序   是“;换句话说,无论你以什么顺序向我们提供参赛作品   首先,这就是我们使用的订单。

     

Jared Levy:您还可以复制具有所需顺序的TreeMap或LinkedHashMap。

是的,我应该相信javadoc,虽然我认为javadoc在这种情况下会更好。看来我不是第一个被它搞糊涂的人。如果没有别的,这个Q / A将帮助谷歌下次有人搜索“ImmutableMap迭代”: - )

答案 1 :(得分:20)

更准确地说,ImmutableMap工厂方法和构建器返回实例,这些实例遵循构造中的映射时提供的输入的迭代顺序。但是,一个ImmutableSortedMap,它是ImmutableMap的子类。对键进行排序。

答案 2 :(得分:5)

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

源代码的快速视图显示地图由数组支持,迭代将通过也由数组支持的ImmutableSet完成。所以我认为文档是正确的,元素的顺序将保持不变。