Подтвердить что ты не робот

Заказ Google Immensions для иетерации ImmutableMap

Мне нужна комбинация Google Collection ImmutableMap и LinkedHashMap - неизменяемая карта с определенным порядком итераций. Кажется, что сам ImmutableMap фактически определил порядок итераций, по крайней мере, его документация гласит:

Неизменяемая карта на основе хеш-функции с надежным заданным пользователем порядком итераций.

Однако подробностей больше нет. Быстрый тест показывает, что это может быть правдой, но я хочу убедиться.

Мой вопрос: могу ли я полагаться на порядок итераций ImmutableMap? Если я сделаю ImmutableMap.copyOf(linkedHashMap), будет ли он иметь тот же порядок итераций, что и исходная связанная хэш-карта? Как насчет неизменных карт, созданных строителем? Некоторая ссылка на авторитетный ответ поможет, так как Google не нашел ничего полезного. (И нет, ссылки на источники не учитываются).

4b9b3361

Ответ 1

Чтобы быть более точным, методы ImmutableMap factory и построитель возвращают экземпляры, которые следуют порядку итерации входов, предоставляемых при построении карты. Тем не менее, ImmutableSortedMap, который является подклассом ImmutableMap. сортирует ключи.

Ответ 2

Я действительно нашел дискуссию об этом, используя ответы авторов библиотек:

Кевин Бурриллион: Что мы подразумеваем под "определяемым пользователем", это "это может быть любой порядок, который вы хотите, чтобы он быть", другими словами, независимо от того, какой порядок вы предоставляете нам в первое место, что порядок, который мы используем.

Джаред Леви: Вы также можете скопировать TreeMap или LinkedHashMap, которые имеют желаемый порядок.

Да, я должен был поверить в javadoc, хотя я думаю, что javadoc может быть лучше в этом случае. Кажется, я не первый, кого это смутило. Если ничего другого, этот Q/A поможет Google в следующий раз, когда кто-то ищет "Истеризацию ImmutableMap": -)

Ответ 3

Вы должны поверить в javadoc. Если этого недостаточно, прочитайте исходный код или сообщите об ошибке.

Быстрый просмотр исходного кода показывает, что карта поддерживается массивом, и итерация выполняется через ImmutableSet, который также поддерживается массивом. Поэтому я думаю, что документация правильная, и порядок элементов будет сохранен, как есть.