Skip to content

Latest commit

 

History

History
106 lines (71 loc) · 4.95 KB

04_Other_Methods.md

File metadata and controls

106 lines (71 loc) · 4.95 KB

《《《 返回首页
《《《 上一节

其他方法

Collections 类提供了许多实用方法,其中一些我们已经看到使用。 我们在这里按字母顺序审查它们。

addAll

<T> boolean addAll(Collection<? super T> c, T... elements) // 将所有指定的元素添加到指定的集合中。

我们已经多次使用这种方法作为初始化具有单独元素的集合或数组内容的方便和有效的方式。

asLifoQueue

<T> Queue<T> asLifoQueue(Deque<T> deque) // 返回 Deque 作为后进先出(Lifo)队列的视图。

回顾第 14 章,虽然队列可以对其元素施加各种不同的排序,但没有提供 LIFO 排序的标准队列实现。另一方面,排队实现都支持 LIFO 排序,如果元素从出列 队列的同一端移除因为他们被添加。asLifo Queue 方法允许您通过简洁的 Queue 界面使用此功能。

disjoint

boolean disjoint(Collection<?> c1, Collection<?> c2) // 如果 c1 和 c2 没有共同的元素,则返回 true

使用这种方法需要小心; 实现可以迭代两个集合,在另一个集合中测试一个元素用于包含。 因此,如果两个集合以不同方式确定包含,则此方法的结果是未定义的。例 如,如果一个集合是一个 SortedSet,其中包含是由自然顺序或比较器决定的,另一个集合是一个集合,其中包含由其元素的 equals 方法决定,则可能出现这种 情况。

enumeration

<T> Enumeration<T> enumeration(Collection<T> c) // 返回指定集合上的枚举

这个方法提供了与 API 的互操作,这些 API 的方法接受 Enumeration 类型的参数,这是 Iterator 的一个传统版本。 它返回的 EnumerationC 提供的 Iterator 以相同的顺序产生相同的元素。 此方法与方法列表形成一对,方法列表将 Enumeration 值转换为 ArrayList

frequency

int frequency(Collection<?> c, Object o) // 返回 c 中等于 o 的元素数目

如果提供的值 o 为空,则频率返回集合 c 中的空元素数。

list

<T> ArrayList<T> list(Enumeration<T> e) // 返回一个 ArrayList,其中包含由指定的 Enumeration 返回的元素

提供此方法的 API 与其方法返回 Enumeration 类型(Iterator 旧版本)的结果的 API 互操作。 它返回的 ArrayList 包含与 e 提供的相同顺序的 相同元素。 此方法与枚举方法形成一对,该枚举将框架集合转换为 Enumeration

newSetFromMap

<E> Set<E> newSetFromMap(Map<E, Boolean> map) // 返回由指定 map 支持的集合。

正如我们前面看到的,许多集合(如 TreeSetNavigableSkipListSet)都是由映射实现的,并共享其排序,并发性和性能特征。 然而,某些地图(如 WeakHashMapIdentityHashMap)没有标准的 Set 等价物。newSetFromMap 方法的目的是为这些地图提供等效的 Set 实现。newSetFromMap 方法 包装其参数,该参数在提供时必须为空,并且不应直接访问。 此代码显示了使用它创建弱 HashSet 的标准习惯用法,其中元素通过弱引用保存:

Set<Object> weakHashSet = Collections.newSetFromMap(new WeakHashMap<Object, Boolean>());

reverseOrder

<T> Comparator<T> reverseOrder() // 返回一个反转自然顺序的比较器

此方法提供了一种按照自然顺序排序或维护 Comparable 对象集合的简单方法。 这是一个使用的例子:

SortedSet<Integer> s = new TreeSet<Integer>(Collections.reverseOrder());
Collections.addAll(s, 1, 2, 3);
assert s.toString().equals("[3, 2, 1]");

这种方法还有另一种形式。

<T> Comparator<T> reverseOrder(Comparator<T> cmp)

此方法与前一个方法相似,但不是颠倒对象集合的自然顺序,而是颠倒比较器作为其参数提供的顺序。 它提供 null 的行为对于 Collections 类的方法来说是不 寻常的。Collections 的约定指出,如果提供给它们的集合或类对象为 null,则它的方法抛出 NullPointerException,但如果此方法提供 null,则返回 与 reverseOrder() 的调用相同的结果 - 也就是说,它返回一个 Comparator,它颠倒了一组对象的自然顺序。

结论这完成了我们对由 Collections 类提供的便捷方法的介绍,以及我们对集合框架的讨论。 我们提供了集合,集合,列表,队列和地图,并为您提供了所需的信 息,以选择最适合您需求的接口和实现。

泛型和改进的集合框架可能是 Java 自成立以来最重大的变化。我们对这些变化感到非常兴奋,并希望我们已将这些兴奋传达给了您。我们希望您会看到泛型和集合很 好地融合在一起为您的 Java 编程技巧提供强大的补充。

《《《 返回首页