Convenience Implementations
本节描述了一些微型实现,当您不需要通用实现时,它们会比通用实现更方便,更高效。本节中的所有实现都是通过静态工厂方法而不是public
类提供的。
阵列的列表视图
Arrays.asList方法返回其数组参数的List
视图。对List
的更改将直写到数组,反之亦然。集合的大小是数组的大小,无法更改。如果在List
上调用add
或remove
方法,将产生UnsupportedOperationException
。
此实现的正常使用是在基于数组的 API 和基于集合的 API 之间构建 bridge 梁。它允许您将数组传递给期望Collection
或List
的方法。但是,此实现还有其他用途。如果您需要固定大小的List
,则它比任何通用List
实现都更有效。这是成语。
List<String> list = Arrays.asList(new String[size]);
请注意,不会保留对后备数组的引用。
不可变的多份副本列表
有时,您需要一个由同一元素的多个副本组成的不可变List
。 Collections.nCopies方法返回这样的列表。此实现有两个主要用途。首先是初始化一个新创建的List
;例如,假设您要一个ArrayList
最初由 1,000 个null
元素组成。下面的咒语可以达到 Object。
List<Type> list = new ArrayList<Type>(Collections.nCopies(1000, (Type)null);
当然,每个元素的初始值不必为null
。第二个主要用途是生 Long 现有的List
。例如,假设您想将"fruit bat"
的 69 个副本添加到List<String>
的末尾。目前尚不清楚您为什么要这样做,但是假设您这样做了。以下是您的操作方法。
lovablePets.addAll(Collections.nCopies(69, "fruit bat"));
通过使用同时包含索引和Collection
的addAll
形式,可以将新元素添加到List
的中间而不是其末尾。
不变单身组合
有时您需要一个不变的Set
,它由一个指定的元素组成。 Collections.singleton方法返回这样的Set
。此实现的一种用法是从Collection
中删除所有出现的指定元素。
c.removeAll(Collections.singleton(e));
一个相关的惯用法会从Map
中删除所有 Map 到指定值的元素。例如,假设您有一个Map
-job
-将人们 Map 到他们的工作范围,并且假设您想淘汰所有律师。接下来的一线工作将成为现实。
job.values().removeAll(Collections.singleton(LAWYER));
此实现的另一种用法是向编写为接受值集合的方法提供单个 Importing 值。
空集,列表和 Map 常量
Collections类提供了返回空Set
,List
和Map
-emptySet,emptyList和emptyMap的方法。这些常量的主要用途是当您根本不想提供任何值时,将这些方法作为Collection
值的方法的 Importing,如本例所示。
tourist.declarePurchases(Collections.emptySet());