从 JEP 文档本身 -
描述 -
这些将包括 varargs 重载,因此对集合大小没有固定限制。但是,可以针对较小的大小调整如此创建的集合实例。将为最多十个元素提供特殊情况的API(固定参数重载)。虽然这会在 API 中引入一些混乱,但它避免了 varargs 调用产生的数组分配、初始化和垃圾回收开销。值得注意的是,无论调用的是 fixed-arg 还是 varargs 重载,调用站点的源代码都是相同的。
编辑 - 为了增加动机,正如@CKing的评论中已经提到的那样:
非目标 -
支持具有任意数量元素的高性能、可缩放集合不是目标。重点是小型集合。
动机 -
创建一个小型的、不可修改的集合(比如说,一个集合)涉及构造它,将其存储在局部变量中,并在其上多次调用add(),然后包装它。
Set<String> set = Collections.unmodifiableSet(new HashSet<>(Arrays.asList("a", "b", "c")));
Java 8 流 API 可以通过组合流工厂方法和收集器来构造小型集合。
// Java 8
Set<String> set1 = Collections.unmodifiableSet(Stream.of("a", "b", "c").collect(Collectors.toSet()));
通过提供用于创建小型集合实例的库 API,可以获得集合文本的大部分好处,与更改语言相比,成本和风险会大大降低。例如,用于创建小型 Set 实例的代码可能如下所示:
// Java 9
Set set2 = Set.of("a", "b", "c");