是否有模拟Collections.singleton()/ Collections.singletonList()/ Collections.singletonMap()来获取可变集合?

时间:2014-08-11 08:43:32

标签: java collections wrapping

我知道如果我有元素,并且我想通过我可以调用的元素获取List / Set / Map

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

在这种情况下,我得到不可变的集合(我不能添加/删除元素到集合)。

是否有模拟获得可变集合?

2 个答案:

答案 0 :(得分:8)

  1. 这样的API退出是没有意义的,因为你总是可以使用带有集合的构造函数(new ArrayList(Collections.singleton(whatever))

  2. 如果它存在则会有害。没有合理的API可以让您选择新集合的实现(例如LinkedListArrayList)或其他参数(如初始大小)。

  3. Singleton集合只是非常精简的适配器,用于将单个对象传递给期望集合的API。让它们变得可变会完全违背这一点。

答案 1 :(得分:6)

使用标准库:

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

这些可以将任意数量的元素作为参数。像番石榴这样的图书馆有一些方便的方法:

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