本文共 1269 字,大约阅读时间需要 4 分钟。
本部分描述了一些小型实现,这些实现在您不需要它们的全部功能时,比一般用途的实现更方便、更高效。本节中的所有实现都是通过静态工厂方法而不是公共类提供的。
Arrays.asList方法返回数组参数的列表视图。对列表的更改将写入到数组,反之亦然。集合的大小是数组的大小,不能更改。如果在列表上做添加或删除,将会返回UnsupportedOperationException。
这个实现的正常使用是基于arraybased和基于集合的api之间的桥梁。它允许您将数组传递给期望一个集合或列表的方法。然而,这个实现还有另一个用途。如果您需要一个固定大小的列表,那么它比任何通用的列表实现都要高效。这是成语。
Listlist = Arrays.asList(new String[size]);
注意,不保留对支持数组的引用。
有时您需要一个不可变的列表,其中包含相同元素的多个副本的集合。ncopy方法返回这样的列表。这个实现有两个主要用途。第一个是初始化一个新创建的列表; 例如,假设您希望一个ArrayList最初包含1,000个空元素。下面的这样写可以奏效。
Listlist = new ArrayList (Collections.nCopies(1000, (Type)null);
当然,每个元素的初始值不需要为空。第二个主要用途是扩展现有的列表。例如,假设您想要将字符串“fruit bat”的69个副本添加到列表的末尾< string >。不清楚你为什么想做这样的事,但我们假设你做了。以下是你的做法。
lovablePets.addAll(Collections.nCopies(69, "fruit bat"));
通过使用包含索引和集合的addAll的形式,您可以将新元素添加到列表的中间,而不是在列表的末尾。
不可变的单集
有时您需要一个不可变的单例集,它由一个单一的指定元素组成。的集合。singleton方法返回这样的集合。这个实现的一个用途是删除集合中指定元素的所有出现。c.removeAll(Collections.singleton(e));
一个相关的习语从地图中删除映射到指定值的所有元素。举个例子,假设你有一个地图-工作-把人们映射到他们的工作线上,假设你想要消除所有的律师。下面一行人将做这件事。
job.values().removeAll(Collections.singleton(律师));
这个实现的另一个用途是向用于接收值集合的方法提供一个单一的输入值。
空集、列表和映射常量。
集合类提供了返回空集、列表和映射的方法——emptySet、emptyList和emptyMap。这些常量的主要用途是作为方法的输入,当您不想提供任何值时,这些方法会收集值,就像在本例中那样。tourist.declarePurchases(Collections.emptySet());
转载地址:http://ceqab.baihongyu.com/