便利实现

原文: https://docs.oracle.com/javase/tutorial/collections/implementations/convenience.html

本节描述了几种小型实现,当您不需要它们的全部功能时,它们比通用实现更方便,更高效。本节中的所有实现都是通过静态工厂方法而不是public类提供的。

列表的数组视图

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

此实现的正常使用是作为基于阵列和基于集合的 API 之间的桥梁。它允许您将数组传递给期望CollectionList的方法。但是,这种实现还有另一种用途。如果您需要固定大小的List,它比任何通用List实现更有效。这是成语。

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

请注意,不保留对后备阵列的引用。

不可变的多重复制列表

偶尔你需要一个由同一元素的多个副本组成的不可变ListCollections.nCopies 方法返回这样的列表。该实现有两个主要用途。第一种是初始化新创建的List;例如,假设您想要一个最初由 1,000 null元素组成的ArrayList。以下咒语起作用。

  1. List<Type> list = new ArrayList<Type>(Collections.nCopies(1000, (Type)null);

当然,每个元素的初始值不必是null。第二个主要用途是增加现有的List。例如,假设您要将"fruit bat"的 69 个副本添加到List&lt;String>的末尾。目前尚不清楚你为什么要做这样的事情,但让我们假设你做了。以下是你如何做到的。

  1. lovablePets.addAll(Collections.nCopies(69, "fruit bat"));

通过使用同时采用索引和CollectionaddAll形式,可以将新元素添加到List的中间而不是它的末尾。

不可变单身集

有时候你需要一个不可变的*单例 _ Set,它由一个指定的元素组成。 Collections.singleton 方法返回这样的Set。此实现的一个用途是从Collection中删除所有出现的指定元素。

  1. c.removeAll(Collections.singleton(e));

相关的习语从Map中删除映射到指定值的所有元素。例如,假设您有一个Map - job - 将人们映射到他们的工作线上,并假设您想要消除所有律师。以下单行将做的事情。

  1. job.values().removeAll(Collections.singleton(LAWYER));

此实现的另一个用途是为编写为接受值集合的方法提供单个输入值。

空集,列表和地图常量

Collections 类提供返回空SetListMap - emptySetemptyList 的方法,和 emptyMap 。这些常量的主要用途是当您不想提供任何值时采用Collection值的方法的输入,如本示例所示。

  1. tourist.declarePurchases(Collections.emptySet());