Существует ли метод Collections.singleton()/Collections.singletonList()/Collections.singletonMap() для получения изменчивой коллекции?

Я знаю, если у меня есть элемент, и я хочу получить List/Set/Map с этим элементом, который я могу вызвать:

Collections.singleton()/Collections.singletonList()/Collections.singletonMap()

В этом случае я получаю неизменную коллекцию (я не могу добавить/удалить элемент в коллекцию).

Существует ли аналог для получения изменчивой коллекции?

Ответ 1

  1. Для выхода такого API не было бы никакого смысла, потому что вы всегда можете использовать конструктор, который берет коллекцию (new ArrayList(Collections.singleton(whatever)))

  2. Если бы это существовало, это было бы вредно. Никакие здравомыслящие API не позволят вам выбрать реализацию новой коллекции (например, LinkedList против ArrayList) или дополнительные параметры (например, начальный размер).

Коллекции Singleton - это очень скудные адаптеры для передачи одного объекта API-интерфейсам, которые ожидают коллекцию. Если бы они были изменчивыми, это полностью оспаривало бы суть.

Ответ 2

Со стандартными библиотеками вы можете использовать:

new ArrayList<...>(Arrays.asList(...)))
new HashSet<...>(Arrays.asList(...)))

Они могут принимать любое количество элементов в качестве параметров. Библиотеки, такие как guava, имеют несколько более удобные методы:

Sets.newHashSet(...)
Lists.newArrayList(...)
Maps.newHashMap(ImmutableMap.of(...))