我知道如果我有元素,并且我想通过我可以调用的元素获取List
/ Set
/ Map
:
Collections.singleton()
/ Collections.singletonList()
/ Collections.singletonMap()
在这种情况下,我得到不可变的集合(我不能添加/删除元素到集合)。
是否有模拟获得可变集合?
答案 0 :(得分:8)
这样的API退出是没有意义的,因为你总是可以使用带有集合的构造函数(new ArrayList(Collections.singleton(whatever))
)
如果它存在则会有害。没有合理的API可以让您选择新集合的实现(例如LinkedList
与ArrayList
)或其他参数(如初始大小)。
Singleton集合只是非常精简的适配器,用于将单个对象传递给期望集合的API。让它们变得可变会完全违背这一点。
答案 1 :(得分:6)
使用标准库:
new ArrayList<...>(Arrays.asList(...)))
new HashSet<...>(Arrays.asList(...)))
这些可以将任意数量的元素作为参数。像番石榴这样的图书馆有一些方便的方法:
Sets.newHashSet(...)
Lists.newArrayList(...)
Maps.newHashMap(ImmutableMap.of(...))