Обходной метод ImmutableMap.of() для HashMap в Картах?

Существуют утилиты для создания ImmutableMap как Immutable.of(Key, value) и его перегрузки.

Но таких методов не существует для HashMap или LinkedHashMap в классе Maps.

Есть ли лучший способ сделать это, или Guava предполагает, что такая карта всегда является постоянной картой, а ImmutableMap лучше всего подходит и не нужно предоставлять утилиту для HashMap.

Ответ 1

Зачем вам нужны те, у которых есть регулярные HashMap или LinkedHashMap? Вы можете просто сделать это:

Map<String, Object> map = Maps.newHashMap();
map.put(key, value);

Вещь с ImmutableMap заключается в том, что ее создание немного сложнее; вам сначала нужно сделать Builder, затем поместить пары ключ-значение в построитель, а затем вызвать build() на нем, чтобы создать ImmutableMap. Метод ImmutableMap.of() делает его более коротким для записи, если вы хотите создать ImmutableMap с одной парой ключ-значение.

Подумайте, что вам нужно написать, если вы не будете использовать метод ImmutableMap.of():

ImmutableMap<String, Object> map = ImmutableMap.builder()
    .put(key, value);
    .build();

Ответ 3

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

Ответ 4

ImmutableMap.of() возвращает неизменяемую карту хеша без указания порядка.

Если вам нужна упорядоченная неизменяемая карта, ImmutableSortedMap.of() - это выбор.

ImmutableSortedMap предоставляет такие методы, как firstKey(), lastKey(), headMap(K) и tailMap(K);

Оба класса предоставляют метод copyOf(Map).