Java常用API 之 java.util.Collections类(附解析和示例)_14

public class Collections
extends Object

java.util.Collections类直接继承自Object类。

    Collections类由操作 collection 的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定 collection 支持的新 collection,以及少数其他内容。如果为此类的方法所提供的 collection 或类对象为 null,则这些方法都将抛出 NullPointerException。

    Collections类中所含多态算法的文档通常包括对实现 的简短描述。应该将这类描述视为实现注意事项,而不是规范 的一部分。实现者应该可以随意使用其他算法替代,只要遵循规范本身即可。(例如,sort 使用的算法不一定是合并排序算法,但它必须是稳定的。)

静态方法

static boolea

addAll(Collection c, T... elements) 

将所有指定元素添加到指定 collection 中。此便捷方法的行为与 c.addAll(Arrays.asList(elements)) 的行为是相同的,但在大多数实现下,此方法运行起来可能要快得多。

static Queue

asLifoQueue(Deque deque)

以后进先出 (Lifo(类似栈)) Queue 的形式返回某个 Deque 的视图。方法 add 被映射到 push,remove 被映射到 pop 等等。在希望使用某一方法获取一个 Queue 并且需要它具有 Lifo 顺序时,此方法很有用。

static int

binarySearch(List> list, T key) 

--------------------------

static int 

binarySearch(List list, T key, Comparator c) 类似

使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据指定的比较器对列表进行升序排序(通过 sort(List, Comparator) 方法)。如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。

此方法对“随机访问”的列表运行 log(n) 次(它提供接近固定时间的位置访问)。如果指定列表没有实现 RandomAccess 接口并且是一个大型列表,则此方法将执行基于迭代器的二分搜索,执行 O(n) 次链接遍历和 O(log n) 次元素比较。

static Collection

checkedCollection(Collection c, Class type) 



返回指定 collection 的一个动态类型安全视图。试图插入一个错误类型的元素将导致立即抛出 ClassCastException。

Collection c = new HashSet();
可以暂时用下面的声明代替:
Collection c = Collections.checkedCollection(new HashSet(), String.class);

再次运行程序会造成它在将类型不正确的元素插入 collection 的地方失败,从而清楚地识别问题的来源。


static void

copy(List dest, List src) 

将所有元素从一个列表复制到另一个列表。执行此操作后,目标列表中每个已复制元素的索引将等同于源列表中该元素的索引。目标列表的长度至少必须等于源列表。如果目标列表更长一些,也不会影响目标列表中的其余元素。

static boolea

disjoint(Collection c1, Collection c2)

如果两个指定 collection 中没有相同的元素,则返回 true。
static void
fill(List list, T obj) 
使用指定元素替换指定列表中的所有元素。此方法以线性时间运行。

static int

frequency(Collection c, Object o) 

返回指定 collection 中等于指定对象的元素数。

static int

indexOfSubList(List source, List target) 

返回指定源列表中第一次出现指定目标列表的起始位置;如果没有出现这样的列表,则返回 -1。

static int

lastIndexOfSubList(List source, List target)

返回指定源列表中最后一次出现指定目标列表的起始位置;如果没有出现这样的列表,则返回 -1。
static

T

max(Collection coll) 

---------------

min类似

根据元素的自然顺序,返回给定 collection 的最大元素。collection 中的所有元素都必须实现 Comparable 接口。此方法在整个 collection 上进行迭代,所以它需要的时间与 collection 的大小成正比。

static T

max(Collection coll, Comparator comp)

------------------

min类似

根据指定比较器产生的顺序,返回给定 collection 的最大元素。

static boolean

replaceAll(List list, T oldVal, T newVal) 

使用另一个值替换列表中出现的所有某一指定值。

static void

reverse(List list) 

反转指定列表中元素的顺序。
此方法以线性时间运行。

static void

rotate(List list, int distance) 

根据指定的距离轮换指定列表中的元素。

假设 list 包含 [t, a, n, k, s]。在调用 Collections.rotate(list, 1)(或 Collections.rotate(list, -4))之后,list 将包含 [s, t, a, n, k]。

此方法用于子列表时非常有用,可以在保留其余元素顺序的同时,在列表中移动一个或多个元素。

假设 list 包含 [a, b, c, d, e]。要将索引 1 处的元素(b)向前移动两个位置,请执行以下调用:
Collections.rotate(l.subList(1, 4), -1),得到的列表是 [a, c, d, b, e]。

static void

shuffle(List list) 

使用默认随机源对指定列表进行置换。所有置换发生的可能性都是大致相等的。

此方法以线性时间运行。如果指定列表没有实现 RandomAccess 接口并且是一个大型列表,则此实现在改组列表前将指定列表转储到数组中,并将改组后的数组转储回列表中。这避免了二次行为,该行为是原地改组一个“有序访问”列表引起的。

static > void

sort(List list) 

----------

static void

sort(List list, Comparator c) 类似

 根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。

此排序方法具有稳定性:不会因调用 sort 方法而对相等的元素进行重新排序。
指定列表必须是可修改的,但不必是大小可调整的。
该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n) 性能。 此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生的 n2 log(n) 性能。

static void

swap(List list, int i, int j) 

在指定列表的指定位置处交换元素。

static Collection

synchronizedCollection(Collection c) 

返回指定 collection 支持的同步(线程安全的)collection。为了保证按顺序访问,必须通过返回的 collection 完成所有对底层实现 collection 的访问。
在返回的 collection 上进行迭代时,用户必须手工在返回的 collection 上进行同步:
  Collection c = Collections.synchronizedCollection(myCollection);
     ...
  synchronized(c) {
      Iterator i = c.iterator(); // Must be in the synchronized block
      while (i.hasNext())
         foo(i.next());
  }

static Collection

unmodifiableCollection(Collection c) 

返回指定 collection 的不可修改视图。此方法允许模块为用户提供对内部 collection 的“只读”访问。在返回的 collection 上执行的查询操作将“读完”指定的 collection。试图修改返回的 collection(不管是直接修改还是通过其迭代器进行修改)将导致抛出 UnsupportedOperationException。

你可能感兴趣的:(Java常用API)