我需要Google Collection ImmutableMap
和LinkedHashMap
的组合 - 具有已定义迭代顺序的不可变地图。似乎ImmutableMap本身实际上定义了迭代顺序,至少its documentation says:
基于散列的不可变Map,具有可靠的用户指定迭代顺序。
然而,没有更多细节。快速测试表明这可能是真的,但我想确定。
我的问题是:我可以依赖ImmutableMap的迭代顺序吗?如果我ImmutableMap.copyOf(linkedHashMap)
,它是否与原始链接哈希映射具有相同的迭代顺序?构建器创建的不可变映射怎么样?一些权威答案的链接会有所帮助,因为谷歌没有找到任何有用的东西。 (不,与来源的链接不计算在内。)
答案 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完成。所以我认为文档是正确的,元素的顺序将保持不变。