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 <T> boolea

addAll(Collection<? super T> c, T... elements) 

將所有指定元素添加到指定 collection 中。此便捷方法的行爲與 c.addAll(Arrays.asList(elements)) 的行爲是相同的,但在大多數實現下,此方法運行起來可能要快得多。

static <T> Queue<T>

asLifoQueue(Deque<T> deque)

以後進先出 (Lifo(類似棧)) Queue 的形式返回某個 Deque 的視圖。方法 add 被映射到 push,remove 被映射到 pop 等等。在希望使用某一方法獲取一個 Queue 並且需要它具有 Lifo 順序時,此方法很有用。

static <T> int

binarySearch(List<? extends Comparable<? super T>> list, T key) 

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

static <T> int 

binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 類似

使用二分搜索法搜索指定列表,以獲得指定對象。在進行此調用之前,必須根據指定的比較器對列表進行升序排序(通過 sort(List, Comparator) 方法)。如果搜索鍵包含在列表中,則返回搜索鍵的索引;否則返回 (-(插入點) - 1)。

此方法對“隨機訪問”的列表運行 log(n) 次(它提供接近固定時間的位置訪問)。如果指定列表沒有實現 RandomAccess 接口並且是一個大型列表,則此方法將執行基於迭代器的二分搜索,執行 O(n) 次鏈接遍歷和 O(log n) 次元素比較。

static <E> Collection<E>

checkedCollection(Collection<E> c, Class<E> type) 



返回指定 collection 的一個動態類型安全視圖。試圖插入一個錯誤類型的元素將導致立即拋出 ClassCastException。

Collection<String> c = new HashSet<String>();
可以暫時用下面的聲明代替:
Collection<String> c = Collections.checkedCollection(new HashSet<String>(), String.class);

再次運行程序會造成它在將類型不正確的元素插入 collection 的地方失敗,從而清楚地識別問題的來源。


static <T> void

copy(List<? super T> dest, List<? extends T> src) 

將所有元素從一個列表複製到另一個列表。執行此操作後,目標列表中每個已複製元素的索引將等同於源列表中該元素的索引。目標列表的長度至少必須等於源列表。如果目標列表更長一些,也不會影響目標列表中的其餘元素。

static boolea

disjoint(Collection<?> c1, Collection<?> c2)

如果兩個指定 collection 中沒有相同的元素,則返回 true。
static<T> void
fill(List<? super T> 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 extends Object & Comparable<? super T>> 

T

max(Collection<? extends T> coll) 

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

min類似

根據元素的自然順序,返回給定 collection 的最大元素。collection 中的所有元素都必須實現 Comparable 接口。此方法在整個 collection 上進行迭代,所以它需要的時間與 collection 的大小成正比。

static <T> T

max(Collection<? extends T> coll, Comparator<? super T> comp)

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

min類似

根據指定比較器產生的順序,返回給定 collection 的最大元素。

static <T> boolean

replaceAll(List<T> 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 <T extends Comparable<? super T>> void

sort(List<T> list) 

----------

static <T> void

sort(List<T> list, Comparator<? super T> c) 類似

 根據元素的自然順序 對指定列表按升序進行排序。列表中的所有元素都必須實現 Comparable 接口。

此排序方法具有穩定性:不會因調用 sort 方法而對相等的元素進行重新排序。
指定列表必須是可修改的,但不必是大小可調整的。
該排序算法是一個經過修改的合併排序算法(其中,如果低子列表中的最高元素小於高子列表中的最低元素,則忽略合併)。此算法提供可保證的 n log(n) 性能。 此實現將指定列表轉儲到一個數組中,並對數組進行排序,在重置數組中相應位置處每個元素的列表上進行迭代。這避免了由於試圖原地對鏈接列表進行排序而產生的 n2 log(n) 性能。

static void

swap(List<?> list, int i, int j) 

在指定列表的指定位置處交換元素。

static <T> Collection<T>

synchronizedCollection(Collection<T> 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 <T> Collection<T>

unmodifiableCollection(Collection<? extends T> c) 

返回指定 collection 的不可修改視圖。此方法允許模塊爲用戶提供對內部 collection 的“只讀”訪問。在返回的 collection 上執行的查詢操作將“讀完”指定的 collection。試圖修改返回的 collection(不管是直接修改還是通過其迭代器進行修改)將導致拋出 UnsupportedOperationException。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章