Google Collections ImmutableMap迭代顺序

我需要Google Collection ImmutableMapLinkedHashMap组合 – 具有定义的迭代顺序的不可变映射。 似乎ImmutableMap本身实际上已经定义了迭代顺序,至少它的文档说 :

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

但是没有更多细节。 快速测试表明这可能是真的,但我想确定。 不幸的是,快速浏览一下这些消息来源对我没什么帮助。

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

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

我实际上已经找到了关于这个问题的讨论,以及图书馆作者的答案 :

Kevin Bourrillion:“用户指定”的意思是“它可以是你想要的任何顺序”; 换句话说,无论您首先向我们提供条目的顺序,这就是我们使用的顺序。

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

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

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

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