Java中的Collections类– java.util.Collections

时间:2020-02-23 14:36:27  来源:igfitidea点击:

Java中的Collections类是与Java中的集合一起使用的有用实用程序类。
" java.util.Collections"类直接扩展" Object"类,并且专门由对Collections进行操作或者返回它们的静态方法组成。

Java中的Collections类

Collections类包含对集合和"包装器"进行操作的多态算法-返回由指定集合支持的新集合。
它是Java Collections Framework的成员。

此类中包含的多态算法文档通常包括对实现的简要说明,该描述被视为实现说明,而不是规范的一部分。

在实现这些方法时,只要遵守规范本身,我们就可以用其他算法代替。
例如,Collections.sort()使用的算法不一定是mergesort,但是必须稳定。

集合类字段

Collections类包含3个字段:EMPTY_LISTEMPTY_SETEMPTY_MAP,可分别用于获取不可变的空List,Map和Set。

集合类方法

让我们以一个示例集合为例,并逐步介绍Java中Collections类提供的不同方法。

  • boolean addAll(Collection c,T ... elements):此方法将所有提供的元素立即添加到指定的collection中。
    可以将这些元素提供为以逗号分隔的列表。

输出为:

  • void sort(List list,Comparator c):此方法根据自然顺序对提供的列表进行排序。
    如果我们想要一些自定义的排序,我们也可以传入比较器。

输出:

  • Queue asLifoQueue(Deque deque):此方法返回Deque作为后进先出(Lifo)Queue的视图。

add和remove方法分别映射为push,pop等。
当我们想使用需要Queue但需要Lifo排序的方法时,这很有用。

输出:

  • int binarySearch(List <?extendeds Comparable> list,T key):此方法使用二进制搜索在指定列表中搜索密钥。
    在调用此方法之前,列表应按自然顺序排序,否则结果将是不确定的。
    如果找到元素,则返回已排序列表中元素的索引,在其他情况下,返回(-(插入点)-1)。
    其中,插入点定义为将键插入列表的点,即,第一个元素的索引大于键,如果列表中的所有元素均小于指定的元素,则为list.size()键。

请注意,这保证了如果找到密钥,返回值将> = 0。

输出:
我们还可以传入一个" Comparator",它表示列表是按照指定比较器所诱导的顺序排序的

  • Collection CheckedCollection(Collection c,Class type):此方法提供所提供集合的动态类型安全视图。
    注意集合,不要其中插入任何错误键入的元素,这很有用。

输出:
类似地,我们有针对特定集合的检查方法,例如"列表","地图","集合"等。

  • void copy(List dest,List src):此方法将所有元素从源列表复制到目标列表。
    执行此操作后,目标列表中每个复制元素的索引将与源列表中其索引的索引相同。
    在上一个方法示例中,我们创建了一个包含5个元素的列表。
    让我们将"水果"列表复制到此列表中,看看会发生什么:
    输出将是:
    目标列表必须至少与源列表一样长。
    在我们的示例中,它比源列表长,因此在这种情况下,目标列表中的其余元素不受影响(此处为"四个"和" 10")。

  • boolean disjoint(Collection c1,Collection c2):如果两个指定的collection没有共同的元素,则此方法返回true。
    在前面的示例中,我们将结果复制到了list中,因此现在它们是不相交的。
    因此,当我们执行时:
    输出将是:
    让我们为"蔬菜"创建另一个列表,并检查它是否与"水果"不相交。

输出为:
如果我们在两个参数中传递相同的集合,则将返回false,除非它们为空:
输出:

  • void fill(List list,T obj):此方法用指定的元素替换指定列表的所有元素。

如果我们填写"列表"列表,则将替换其所有五个元素:
输出:

  • int frequency(Collection c,Object o):此方法返回指定集合中等于指定对象的元素数。
    在前面的示例中,如果说:
    它返回:
  • int indexOfSubList(List source,List target):此方法返回指定目标列表在指定源列表中首次出现的起始位置,如果没有出现则返回-1。
    例如,如果创建一个"水果"列表的子列表:
    我们得到我们的结论:
    因为此子列表从水果的索引1开始。

现在,如果我们尝试对另一个不存在的子列表执行相同的操作:
我们得到:
还要注意,如果子列表的大小>列表的大小,我们得到-1。

我们还有另一个方法intlastIndexOfSubList(List source,List target),该方法只返回指定子列表的最后一个索引,否则产生与此输出相同的输出。

  • 静态ArrayList list(Enumeration e)和Enumeration enumeration(Collection c):这些方法分别从枚举返回数组列表和从集合枚举返回,以便在返回枚举的旧式API与新API之间提供互操作性。
    需要收集。

  • T max(Collection coll,Comparator comp):此方法根据元素的自然顺序返回collection中的最大元素。

输出:
如果我们要自定义排序,也可以在此方法内传递Comparator

同样,也可以使用"最小"方法,该方法可以在有或者没有"比较器"的情况下使用。

  • Collection &lt;T> SynchronizedCollection(Collection &lt;T> c):此方法返回由提供的集合支持的同步(线程安全)集合。
    在需要时,可以方便地从任何集合对象中获取同步的集合。
    API还为我们提供了" synchronizedList"方法,该方法返回由参数中提供的列表支持的线程安全列表。

此外,还有可用的" synchronizedMap"," synchronizedSet"," synchronizedSortedSet"以及" synchronizedSortedMap"方法,它们可以完成类似的工作。

这些是常用的方法,除此之外,我们还有其他方法,例如newSetFromMapreplaceAllswapreverse等。

请注意,如果提供给它们的集合或者类对象为null,则此类的所有方法都将抛出" NullPointerException"。

"破坏性"算法-修改此类操作所基于的集合的算法,包含在此类中,如果该集合不支持相应的变异原语,则将其抛出UnsupportedOperationException。

同样,如果调用对集合没有影响,这些算法可能会抛出异常,也可能不会抛出此异常。
例如,在已经排序的不可修改列表上调用sort方法可能会或者可能不会抛出UnsupportedOperationException