Convenience Implementations

本节描述了一些微型实现,当您不需要通用实现时,它们会比通用实现更方便,更高效。本节中的所有实现都是通过静态工厂方法而不是public类提供的。

阵列的列表视图

Arrays.asList方法返回其数组参数的List视图。对List的更改将直写到数组,反之亦然。集合的大小是数组的大小,无法更改。如果在List上调用addremove方法,将产生UnsupportedOperationException

此实现的正常使用是在基于数组的 API 和基于集合的 API 之间构建 bridge 梁。它允许您将数组传递给期望CollectionList的方法。但是,此实现还有其他用途。如果您需要固定大小的List,则它比任何通用List实现都更有效。这是成语。

List<String> list = Arrays.asList(new String[size]);

请注意,不会保留对后备数组的引用。

不可变的多份副本列表

有时,您需要一个由同一元素的多个副本组成的不可变ListCollections.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"));

通过使用同时包含索引和CollectionaddAll形式,可以将新元素添加到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类提供了返回空SetListMap-emptySetemptyListemptyMap的方法。这些常量的主要用途是当您根本不想提供任何值时,将这些方法作为Collection值的方法的 Importing,如本例所示。

tourist.declarePurchases(Collections.emptySet());