|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.util.Collections
public class Collections
此類別完全由在 collection 上進行操作或返回 collection 的靜態方法組成。它包含在 collection 上操作的多態演算法,即「外覆器」,外覆器返回由指定 collection 支持的新 collection,以及少數其他內容。
如果為此類別的方法所提供的 collection 或類別物件為 null,則這些方法都將拋出 NullPointerException。
此類別中所含多態演算法的文檔通常包括對實作 的簡短描述。應該將這類別描述視為實作注意事項,而不是規範 的一部分。實作者應該可以隨意使用其他演算法替代,只要遵循規範本身即可。(例如,sort 使用的演算法不一定是合併排序演算法,但它必須是穩定的。)
此類別中包含的「破壞性」演算法,即可修改其所操作的 collection 的演算法,該演算法被指定在 collection 不支持適當的可變基元(比如 set 方法)時拋出 UnsupportedOperationException。如果調用不會對 collection 產生任何影響,那麼這些演算法可能(但不要求)拋出此異常。例如,在已經排序的、不可修改列表上調用 sort 方法可能會(也可能不會)拋出 UnsupportedOperationException。
此類別是 Java Collections Framework 的成員。
Collection
,
Set
,
List
,
Map
欄位摘要 | |
---|---|
static List |
EMPTY_LIST
空的列表(不可變的)。 |
static Map |
EMPTY_MAP
空的映射(不可變的)。 |
static Set |
EMPTY_SET
空的 set(不可變的)。 |
方法摘要 | ||
---|---|---|
static
|
addAll(Collection<? super T> c,
T... elements)
將所有指定元素添加到指定 collection 中。 |
|
static
|
asLifoQueue(Deque<T> deque)
以後進先出 (Lifo) Queue 的形式返回某個 Deque 的視圖。 |
|
static
|
binarySearch(List<? extends Comparable<? super T>> list,
T key)
使用二分搜尋法搜尋指定列表,以獲得指定物件。 |
|
static
|
binarySearch(List<? extends T> list,
T key,
Comparator<? super T> c)
使用二分搜尋法搜尋指定列表,以獲得指定物件。 |
|
static
|
checkedCollection(Collection<E> c,
Class<E> type)
返回指定 collection 的一個動態型別安全視圖。 |
|
static
|
checkedList(List<E> list,
Class<E> type)
返回指定列表的一個動態型別安全視圖。 |
|
static
|
checkedMap(Map<K,V> m,
Class<K> keyType,
Class<V> valueType)
返回指定映射的一個動態型別安全視圖。 |
|
static
|
checkedSet(Set<E> s,
Class<E> type)
返回指定 set 的一個動態型別安全視圖。 |
|
static
|
checkedSortedMap(SortedMap<K,V> m,
Class<K> keyType,
Class<V> valueType)
返回指定有序映射的一個動態型別安全視圖。 |
|
static
|
checkedSortedSet(SortedSet<E> s,
Class<E> type)
返回指定有序 set 的一個動態型別安全視圖。 |
|
static
|
copy(List<? super T> dest,
List<? extends T> src)
將所有元素從一個列表複製到另一個列表。 |
|
static boolean |
disjoint(Collection<?> c1,
Collection<?> c2)
如果兩個指定 collection 中沒有相同的元素,則返回 true。 |
|
static
|
emptyList()
返回空的列表(不可變的)。 |
|
static
|
emptyMap()
返回空的映射(不可變的)。 |
|
static
|
emptySet()
返回空的 set(不可變的)。 |
|
static
|
enumeration(Collection<T> c)
返回一個指定 collection 上的列舉。 |
|
static
|
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
|
list(Enumeration<T> e)
返回一個陣列列表,它按返回順序包含指定列舉返回的元素。 |
|
static
|
max(Collection<? extends T> coll)
根據元素的自然順序,返回給定 collection 的最大元素。 |
|
static
|
max(Collection<? extends T> coll,
Comparator<? super T> comp)
根據指定比較器產生的順序,返回給定 collection 的最大元素。 |
|
static
|
min(Collection<? extends T> coll)
根據元素的自然順序 返回給定 collection 的最小元素。 |
|
static
|
min(Collection<? extends T> coll,
Comparator<? super T> comp)
根據指定比較器產生的順序,返回給定 collection 的最小元素。 |
|
static
|
nCopies(int n,
T o)
返回由指定物件的 n 個副本組成的不可變列表。 |
|
static
|
newSetFromMap(Map<E,Boolean> map)
返回指定映射支持的 set。 |
|
static
|
replaceAll(List<T> list,
T oldVal,
T newVal)
使用另一個值替換列表中出現的所有某一指定值。 |
|
static void |
reverse(List<?> list)
反轉指定列表中元素的順序。 |
|
static
|
reverseOrder()
返回一個比較器,它強行逆轉實作了 Comparable 介面的物件 collection 的自然順序。 |
|
static
|
reverseOrder(Comparator<T> cmp)
返回一個比較器,它強行逆轉指定比較器的順序。 |
|
static void |
rotate(List<?> list,
int distance)
根據指定的距離輪換指定列表中的元素。 |
|
static void |
shuffle(List<?> list)
使用預設隨機源對指定列表進行置換。 |
|
static void |
shuffle(List<?> list,
Random rnd)
使用指定的隨機源對指定列表進行置換。 |
|
static
|
singleton(T o)
返回一個只包含指定物件的不可變 set。 |
|
static
|
singletonList(T o)
返回一個只包含指定物件的不可變列表。 |
|
static
|
singletonMap(K key,
V value)
返回一個不可變的映射,它只將指定鍵映射到指定值。 |
|
static
|
sort(List<T> list)
根據元素的自然順序 對指定列表按升序進行排序。 |
|
static
|
sort(List<T> list,
Comparator<? super T> c)
根據指定比較器產生的順序對指定列表進行排序。 |
|
static void |
swap(List<?> list,
int i,
int j)
在指定列表的指定位置處交換元素。 |
|
static
|
synchronizedCollection(Collection<T> c)
返回指定 collection 支持的同步(執行緒安全的)collection。 |
|
static
|
synchronizedList(List<T> list)
返回指定列表支持的同步(執行緒安全的)列表。 |
|
static
|
synchronizedMap(Map<K,V> m)
返回由指定映射支持的同步(執行緒安全的)映射。 |
|
static
|
synchronizedSet(Set<T> s)
返回指定 set 支持的同步(執行緒安全的)set。 |
|
static
|
synchronizedSortedMap(SortedMap<K,V> m)
返回指定有序映射支持的同步(執行緒安全的)有序映射。 |
|
static
|
synchronizedSortedSet(SortedSet<T> s)
返回指定有序 set 支持的同步(執行緒安全的)有序 set。 |
|
static
|
unmodifiableCollection(Collection<? extends T> c)
返回指定 collection 的不可修改視圖。 |
|
static
|
unmodifiableList(List<? extends T> list)
返回指定列表的不可修改視圖。 |
|
static
|
unmodifiableMap(Map<? extends K,? extends V> m)
返回指定映射的不可修改視圖。 |
|
static
|
unmodifiableSet(Set<? extends T> s)
返回指定 set 的不可修改視圖。 |
|
static
|
unmodifiableSortedMap(SortedMap<K,? extends V> m)
返回指定有序映射的不可修改視圖。 |
|
static
|
unmodifiableSortedSet(SortedSet<T> s)
返回指定有序 set 的不可修改視圖。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
欄位詳細資訊 |
---|
public static final Set EMPTY_SET
emptySet()
public static final List EMPTY_LIST
emptyList()
public static final Map EMPTY_MAP
emptyMap()
方法詳細資訊 |
---|
public static <T extends Comparable<? super T>> void sort(List<T> list)
此排序方法具有穩定性:不會因調用 sort 方法而對相等的元素進行重新排序。
指定列表必須是可修改的,但不必是大小可調整的。
該排序演算法是一個經過修改的合併排序演算法(其中,如果低子列表中的最高元素小於高子列表中的最低元素,則忽略合併)。此演算法提供可保證的 n log(n) 性能。 此實作將指定列表轉儲到一個陣列中,並對陣列進行排序,在重置陣列中相應位置處每個元素的列表上進行迭代。這避免了由於試圖原地對連接列表進行排序而產生的 n2 log(n) 性能。
list
- 要排序的列表。
ClassCastException
- 如果列表包含不可相互比較 的元素(例如,字元串和整數)。
UnsupportedOperationException
- 如果指定列表的列表迭代器不支持 set 操作。Comparable
public static <T> void sort(List<T> list, Comparator<? super T> c)
此排序被保證是穩定的:不會因調用 sort 而對相等的元素進行重新排序。
排序演算法是一個經過修改的合併排序演算法(其中,如果低子列表中的最高元素小於高子列表中的最低元素,則忽略合併)。此演算法提供可保證的 n log(n) 性能。 指定列表必須是可修改的,但不必是可大小調整的。此實作將指定列表轉儲到一個陣列中,並對陣列進行排序,在重置陣列中相應位置每個元素的列表上進行迭代。這避免了由於試圖原地對連接列表進行排序而產生的 n2 log(n) 性能。
list
- 要排序的列表。c
- 確定列表順序的比較器。null 值指示應該使用元素的自然順序。
ClassCastException
- 如果列表中包含不可使用指定比較器相互比較 的元素。
UnsupportedOperationException
- 如果指定列表的列表迭代器不支持 set 操作。Comparator
public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
sort(List)
方法)。如果沒有對列表進行排序,則結果是不確定的。如果列表包含多個等於指定物件的元素,則無法保證找到的是哪一個。
此方法對「隨機存取」列表運行 log(n) 次(它提供接近固定時間的位置存取)。如果指定列表沒有實作 RandomAccess
介面並且是一個大型列表,則此方法將執行基於迭代器的二分搜尋,執行 O(n) 次連接遍歷和 O(log n) 次元素比較。
list
- 要搜尋的列表。key
- 要搜尋的鍵。
ClassCastException
- 如果列表中包含不可相互比較 的元素(例如,字元串和整數),或者搜尋鍵無法與列表的元素進行相互比較。public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
sort(List, Comparator)
方法)。如果沒有對列表進行排序,則結果是不確定的。如果列表包含多個等於指定物件的元素,則無法保證找到的是哪一個。
此方法對「隨機存取」的列表運行 log(n) 次(它提供接近固定時間的位置存取)。如果指定列表沒有實作 RandomAccess
介面並且是一個大型列表,則此方法將執行基於迭代器的二分搜尋,執行 O(n) 次連接遍歷和 O(log n) 次元素比較。
list
- 要搜尋的列表。key
- 要搜尋的鍵。c
- 排序列表的比較器。null 值指示應該使用元素的自然順序。
ClassCastException
- 如果列表中包含使用指定的比較器不可相互比較 的元素,或者使用此比較器無法相互比較搜尋鍵與列表元素。public static void reverse(List<?> list)
此方法以線性時間運行。
list
- 元素要被反轉的列表。
UnsupportedOperationException
- 如果指定列表或其列表迭代器不支持 set 操作。public static void shuffle(List<?> list)
前面描述中使用了不確定的詞「大致」,因為隨機源只是大致上獨立選擇位的無偏源。如果它是一個隨機選擇位的最佳源,那麼演算法將完全一致的選擇置換。
此實作向後遍歷列表,從最後一個元素一直到第二個元素,將隨機選擇的元素重複交換到「當前位置」。元素是從列表的一部分隨機選擇的,該部分列表從第一個元素一直到當前位置(包括)。
此方法以線性時間運行。如果指定列表沒有實作 RandomAccess
介面並且是一個大型列表,則此實作在改組列表前將指定列表轉儲到陣列中,並將改組後的陣列轉儲回列表中。這避免了二次行為,該行為是原地改組一個「有序存取」列表引起的。
list
- 要改組的列表。
UnsupportedOperationException
- 如果指定列表或其列表迭代器不支持 set 操作。public static void shuffle(List<?> list, Random rnd)
此實作向後遍歷列表,從最後一個元素一直到第二個元素,將隨機選擇的元素重複交換到“當前位置”。元素是從列表的一部分隨機選擇的,該部分列表從第一個元素一直到當前位置(包括)。
此方法以線性時間運行。如果指定列表沒有實作 RandomAccess
介面並且是一個大型列表,則此實作在改組列表前將指定列表轉儲到一個陣列中,並將改組後的陣列轉儲回列表中。這避免了二次行為,該行為是原地改組一個“有序存取”列表引起的。
list
- 要改組的列表。rnd
- 用來改組列表的隨機源。
UnsupportedOperationException
- 如果指定列表或其列表迭代器不支持 set 操作。public static void swap(List<?> list, int i, int j)
list
- 進行元素交換的列表。i
- 要交換的一個元素的索引。j
- 要交換的另一個元素的索引。
IndexOutOfBoundsException
- 如果 i 或 j 超出範圍 (i < 0 || i >= list.size() || j < 0 || j >= list.size())。public static <T> void fill(List<? super T> list, T obj)
此方法以線性時間運行。
list
- 使用指定元素填充的列表。obj
- 用來填充指定列表的元素。
UnsupportedOperationException
- 如果指定列表或其列表迭代器不支持 set 操作。public static <T> void copy(List<? super T> dest, List<? extends T> src)
此方法以線性時間運行。
dest
- 目標列表。src
- 源列表。
IndexOutOfBoundsException
- 如果目標列表太小而無法包含整個源列表。
UnsupportedOperationException
- 如果目標列表的列表迭代器不支持 set 操作。public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)
此方法在整個 collection 上進行迭代,所以它需要的時間與 collection 的大小成正比。
coll
- 將確定其最小元素的 collection。
ClassCastException
- 如果 collection 套件含不可相互比較 的元素(例如,字元串和整數)。
NoSuchElementException
- 如果 collection 為空。Comparable
public static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp)
此方法在整個 collection 上進行迭代,所以它需要的時間與 collection 的大小成正比。
coll
- 將確定其最小元素的 collection。comp
- 用來確定最小元素的比較器。null 值指示應該使用元素的自然順序。
ClassCastException
- 如果 collection 中包含不可使用指定比較器相互比較 的元素。
NoSuchElementException
- 如果 collection 為空。Comparable
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
此方法在整個 collection 上進行迭代,所以它需要的時間與 collection 的大小成正比。
coll
- 將確定其最大元素的 collection。
ClassCastException
- 如果 collection 套件含不可相互比較 的元素(例如,字元串和整數)。
NoSuchElementException
- 如果 collection 為空。Comparable
public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp)
此方法在整個 collection 上進行迭代,所以它需要的時間與 collection 的大小成正比。
coll
- 將確定其最大元素的 collection。comp
- 用來確定最大元素的比較器。null 值指示應該使用元素的自然順序。
ClassCastException
- 如果 collection 中包含不可使用指定比較器相互比較 的元素。
NoSuchElementException
- 如果 collection 為空。Comparable
public 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]。
注意,此方法用於子列表時非常有用,可以在保留其餘元素順序的同時,在列表中移動一個或多個元素。例如,以下語句可以將索引 j 處的元素向前移動到位置 k 上(k 必須大於等於 j):
Collections.rotate(list.subList(j, k+1), -1);為了具體說明這一點,假設 list 套件含 [a, b, c, d, e]。要將索引 1 處的元素(b)向前移動兩個位置,請執行以下調用:
Collections.rotate(l.subList(1, 4), -1);得到的列表是 [a, c, d, b, e]。
要將多個元素向前移動,則需要增加循環移動距離的絕對值。要將元素向後移動,請使用一個正的移動距離。
如果指定列表是一個小型列表,或者它實作了 RandomAccess
介面,則此實作會將第一個元素交換到它應該去的位置上,然後重複執行交換操作,將替換的元素交換到它們應該去的位置上,直到替換的元素交換成第一個元素。如有必要,需要在第二個或後續元素上重複這個過程,直到完成輪換。如果指定的列表是大型列表並且沒有實作 RandomAccess 介面,則此實作會將列表拆分成位於 -distance mod size 索引兩邊的兩個子列表視圖。然後在每個子列表視圖上調用 reverse(List)
方法,並最終在整個列表上調用此方法。有關這兩種演算法更為完整的描述,請參閱 Jon Bentley 撰寫的 Programming Pearls (Addison-Wesley, 1986) 一書中的第 2.3 小節。
list
- 要輪換的列表。distance
- 列表輪換的距離。在此值上沒有任何限制;它可以是 0、負數或大於 list.size() 的數。
UnsupportedOperationException
- 如果指定列表或其列表迭代器不支持 set 操作。public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal)
list
- 在其中進行替換的列表。oldVal
- 將被替換的原值。newVal
- 替換 oldVal 的新值。
UnsupportedOperationException
- 如果指定列表或其列表迭代器不支持 set 操作。public static int indexOfSubList(List<?> source, List<?> target)
此實作使用 "brute force" 掃瞄技術在源列表上進行掃瞄,依次在每個位置上尋找與目標比對的列表項。
source
- 在該列表中搜尋第一次出現的 target。target
- 作為 source 子列表搜尋的列表。
public static int lastIndexOfSubList(List<?> source, List<?> target)
此實作使用 "brute force" 迭代技術在源列表上進行迭代,依次在每個位置上尋找與目標比對的列表項。
source
- 在該列表中搜尋最後一次出現的 target。target
- 作為 source 子列表搜尋的列表。
public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c)
返回的 collection 不會 將 hashCode 和 equals 操作傳遞給底層實作 collection,但這依賴於 Object 的 equals 和 hashCode 方法。在底層實作 collection 是一個 set 或是一個列表的情況下,有必要遵守這些操作的協定。
如果指定 collection 是可序列化的,則返回的 collection 也將是可序列化的。
c
- 將為其返回一個不可修改視圖的 collection。
public static <T> Set<T> unmodifiableSet(Set<? extends T> s)
如果指定 set 是可序列化的,則返回的 set 也將是可序列化的。
s
- 將為其返回一個不可修改視圖的 set。
public static <T> SortedSet<T> unmodifiableSortedSet(SortedSet<T> s)
如果指定有序 set 是可序列化的,則返回的有序 set 也將是可序列化的。
s
- 將為其返回一個不可修改視圖的有序 set。
public static <T> List<T> unmodifiableList(List<? extends T> list)
如果指定列表是可序列化的,則返回的列表也將是可序列化的。類似地,如果指定列表實作 RandomAccess
,則返回列表也將這樣做。
list
- 將為其返回一個不可修改視圖的列表。
public static <K,V> Map<K,V> unmodifiableMap(Map<? extends K,? extends V> m)
如果指定映射是可序列化的,則返回的映射也將是可序列化的。
m
- 將為其返回一個不可修改視圖的映射。
public static <K,V> SortedMap<K,V> unmodifiableSortedMap(SortedMap<K,? extends V> m)
如果指定的有序映射是可序列化的,則返回的有序映射也將是可序列化的。
m
- 將為其返回一個不可修改視圖的有序映射。
public static <T> Collection<T> synchronizedCollection(Collection<T> c)
在返回的 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()); }不遵從此建議將導致無法確定的行為。
返回的 collection 不會 將 hashCode 和 equals 操作傳遞給底層實作 collection,但這依賴於 Object 的 equals 和 hashCode 方法。在底層實作 collection 是一個 set 或一個列表的情況下,有必要遵守這些操作的協定。
如果指定 collection 是可序列化的,則返回的 collection 也將是可序列化的。
c
- 被「包裹」在同步 collection 中的 collection。
public static <T> Set<T> synchronizedSet(Set<T> s)
在返回的 set 上進行迭代時,使用者必須手工在返回的 set 上進行同步:
Set s = Collections.synchronizedSet(new HashSet()); ... synchronized(s) { Iterator i = s.iterator(); // Must be in the synchronized block while (i.hasNext()) foo(i.next()); }不遵從此建議將導致無法確定的行為。
如果指定 set 是可序列化的,則返回的 set 也將是可序列化的。
s
- 被「包裹」在同步 set 中的 set。
public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s)
在返回的有序 set 上或者其任意 subSet、headSet 或 tailSet 視圖上進行迭代時,使用者必須手工在返回的有序 set 上進行同步。
SortedSet s = Collections.synchronizedSortedSet(new TreeSet()); ... synchronized(s) { Iterator i = s.iterator(); // Must be in the synchronized block while (i.hasNext()) foo(i.next()); }或者:
SortedSet s = Collections.synchronizedSortedSet(new TreeSet()); SortedSet s2 = s.headSet(foo); ... synchronized(s) { // Note: s, not s2!!! Iterator i = s2.iterator(); // Must be in the synchronized block while (i.hasNext()) foo(i.next()); }不遵從此建議將導致無法確定的行為。
如果指定的有序 set 是可序列化的,則返回的有序 set 也將是可序列化的。
s
- 被「包裹」在同步有序 set 中的有序 set。
public static <T> List<T> synchronizedList(List<T> list)
在返回的列表上進行迭代時,使用者必須手工在返回的列表上進行同步:
List list = Collections.synchronizedList(new ArrayList()); ... synchronized(list) { Iterator i = list.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next()); }不遵從此建議將導致無法確定的行為。
如果指定列表是可序列化的,則返回的列表也將是可序列化的。
list
- 被「包裹」在同步列表中的列表。
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
在返回映射的任意 collection 視圖上進行迭代時,使用者必須手工在返回的映射上進行同步:
Map m = Collections.synchronizedMap(new HashMap()); ... Set s = m.keySet(); // Needn't be in synchronized block ... synchronized(m) { // Synchronizing on m, not s! Iterator i = s.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next()); }不遵從此建議將導致無法確定的行為。
如果指定映射是可序列化的,則返回的映射也將是可序列化的。
m
- 被「包裹」在同步映射中的映射。
public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m)
當在返回的有序映射的 collection 視圖或者其任何 subMap、headMap 或 tailMap 視圖進行迭代時,使用者必須手工在該映射上進行同步:
SortedMap m = Collections.synchronizedSortedMap(new TreeMap()); ... Set s = m.keySet(); // Needn't be in synchronized block ... synchronized(m) { // Synchronizing on m, not s! Iterator i = s.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next()); }或者:
SortedMap m = Collections.synchronizedSortedMap(new TreeMap()); SortedMap m2 = m.subMap(foo, bar); ... Set s2 = m2.keySet(); // Needn't be in synchronized block ... synchronized(m) { // Synchronizing on m, not m2 or s2! Iterator i = s.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next()); }不遵從此建議將導致無法確定的行為。
如果指定的有序映射是可序列化的,則返回的有序映射也將是可序列化的。
m
- 被「包裹」在同步有序映射中的有序映射。
public static <E> Collection<E> checkedCollection(Collection<E> c, Class<E> type)
一般的程式語言機制中都提供了編譯時(靜態)型別檢查,但是一些未經檢查的強制轉換可能會使此機制無效。通常這不是一個問題,因為編譯器會在所有這類別未經檢查的操作上發出警告。但有的時候,只進行單獨的靜態型別檢查並不夠。例如,假設將 collection 傳遞給一個第三方資源庫,則資源庫程式碼不能通過插入一個錯誤型別的元素來毀壞 collection。
動態型別安全視圖的另一個用途是除錯。假設某個程序運行失敗並拋出 ClassCastException,這指示一個型別不正確的元素被放入已參數化 collection 中。不幸的是,該異常可以發生在插入錯誤元素之後的任何時間,因此,這通常只能提供很少或無法提供任何關於問題真正來源的資訊。如果問題是可再現的,那麼可以暫時修改程序,使用一個動態型別安全視圖來包裹該 collection,通過這種方式可快速確定問題的來源。例如,以下宣告:
Collection<String> c = new HashSet<String>();可以暫時用下面的宣告代替:
Collection<String> c = Collections.checkedCollection( new HashSet<String>(), String.class);再次運行程序會造成它在將型別不正確的元素插入 collection 的地方失敗,從而清楚地識別問題的來源。問題得以解決後,可以將修改後的宣告轉換回原來的宣告。
返回的 collection 不會 將 hashCode 和 equals 操作傳遞給底層實作 collection,但這依賴於 Object 的 equals 和 hashCode 方法。在底層實作 collection 是一個 set 或一個列表的情況下,有必要遵守這些操作的協定。
如果指定 collection 是可序列化的,則返回的 collection 也將是可序列化的。
c
- 將返回其動態型別安全視圖的 collectiontype
- 允許 c 持有的元素型別
public static <E> Set<E> checkedSet(Set<E> s, Class<E> type)
可以在 checkedCollection
方法的文檔中找到有關使用動態型別安全視圖的討論。
如果指定 set 是可序列化的,則返回的 set 也將是可序列化的。
s
- 將返回其動態型別安全視圖的 settype
- 允許 s 持有的元素型別
public static <E> SortedSet<E> checkedSortedSet(SortedSet<E> s, Class<E> type)
可以在 checkedCollection
方法的文檔中找到有關使用動態型別安全視圖的討論。
如果指定的有序 set 是可序列化的,則返回的有序 set 也將是可序列化的。
s
- 將返回其動態型別安全視圖的 settype
- 允許 s 持有的元素型別
public static <E> List<E> checkedList(List<E> list, Class<E> type)
可以在 checkedCollection
方法的文檔中找到有關使用動態型別安全視圖的討論。
如果指定列表是可序列化的,則返回的列表也將是可序列化的。
list
- 將返回其動態型別安全視圖的列表type
- 允許 list 持有的元素型別
public static <K,V> Map<K,V> checkedMap(Map<K,V> m, Class<K> keyType, Class<V> valueType)
項集
視圖中獲得的 Map.Entry
實例)都將導致立即拋出 ClassCastException。
假設在產生動態型別安全視圖之前,映射中不包含任何型別不正確的鍵或值,並且所有對映射的後續存取都通過該視圖(或其 collection 視圖之一)進行,則可以保證 該映射不包含型別不正確的鍵或值。
可以在 checkedCollection
方法的文檔中找到有關使用動態型別安全視圖的討論。
如果指定映射是可序列化的,則返回的映射也將是可序列化的。
m
- 將返回其動態型別安全視圖的映射keyType
- 允許 m 持有的鍵型別valueType
- 允許 m 持有的值型別
public static <K,V> SortedMap<K,V> checkedSortedMap(SortedMap<K,V> m, Class<K> keyType, Class<V> valueType)
項集
視圖中獲得的 Map.Entry
實例)將導致立即拋出 ClassCastException。
假設在產生動態型別安全視圖之前,映射中不包含任何型別不正確的鍵或值,並且所有對映射的後續存取都通過該視圖(或其 collection 視圖之一)進行,則可以保證 此映射不包含型別不正確的鍵或值。
可以在 checkedCollection
方法的文檔中找到有關使用動態型別安全視圖的討論。
如果指定映射是可序列化的,則返回的映射也將是可序列化的。
m
- 將返回其動態型別安全視圖的映射keyType
- 允許 m 持有的鍵的型別valueType
- 允許 m 持有的值的型別
public static final <T> Set<T> emptySet()
以下範例演示了獲得空 set 的型別安全 (type-safe) 方式:
Set<String> s = Collections.emptySet();實作注意事項:實作此方法不需要為每次調用創建一個單獨的 Set 物件。使用此方法的開銷與使用 like-named 欄位相當。(與此方法不同,該欄位不提供型別安全。)
EMPTY_SET
public static final <T> List<T> emptyList()
以下範例演示了獲得空列表的型別安全方式:
List<String> s = Collections.emptyList();實作注意事項:實作此方法不需要為每次調用創建一個單獨的 List 物件。使用此方法的開銷與使用 like-named 欄位相當。(與此方法不同,該欄位不提供型別安全。)
EMPTY_LIST
public static final <K,V> Map<K,V> emptyMap()
以下範例演示了獲得空 set 的型別安全方式:
Map<String, Date> s = Collections.emptyMap();實作注意事項:實作此方法不需要為每次調用創建一個單獨的 Map 物件。使用此方法的開銷與使用 like-named 欄位相當。(與此方法不同,該欄位不提供型別安全。)
EMPTY_MAP
public static <T> Set<T> singleton(T o)
o
- 將存儲到返回 set 中的單獨物件。
public static <T> List<T> singletonList(T o)
o
- 將存儲到返回列表中的單獨物件。
public static <K,V> Map<K,V> singletonMap(K key, V value)
key
- 將存儲到返回映射中的單獨鍵。value
- 返回的映射將 key 映射到的值。
public static <T> List<T> nCopies(int n, T o)
n
- 返回列表中的元素數。o
- 重複出現在返回列表中的元素。
IllegalArgumentException
- 如果 n < 0。List.addAll(Collection)
,
List.addAll(int, Collection)
public static <T> Comparator<T> reverseOrder()
Arrays.sort(a, Collections.reverseOrder());將按照逆字典(字母)順序對陣列進行排序。
返回的比較器是可序列化的。
Comparable
public static <T> Comparator<T> reverseOrder(Comparator<T> cmp)
reverseOrder()
(換句話說,它返回一個比較器,該比較器將強行逆轉實作了 Comparable 介面的物件 collection 的自然順序)。
返回的比較器是可序列化的(假設指定的比較器也是可序列化的或者為 null)。
public static <T> Enumeration<T> enumeration(Collection<T> c)
c
- 將返回其列舉的 collection。
Enumeration
public static <T> ArrayList<T> list(Enumeration<T> e)
e
- 為返回的陣列列表提供元素的列舉
Enumeration
,
ArrayList
public static int frequency(Collection<?> c, Object o)
c
- 在其中確定 o 出現頻率的 collectiono
- 將確定出現頻率的物件
NullPointerException
- 如果 c 為 nullpublic static boolean disjoint(Collection<?> c1, Collection<?> c2)
如果將此方法用在不符合 Collection 常規協定的 collection 上,則必須小心。實作可以在任一 collection 上進行迭代,測試元素是否包含在另一個 collection 中(或執行任何等效的計算)。如果任一 collection 使用了一個非標準的相等性測試(比如順序不是與 equals 一致的 SortedSet
,或者 IdentityHashMap
的鍵集),則兩個 collection 都必須使用相同的非標準相等性測試,否則此方法的結果是不確定的。
注意,允許在兩個參數中傳遞相同的 collection,在這種情況下,當且僅當 collection 為空時此方法返回 true。
c1
- 一個 collectionc2
- 一個 collection
NullPointerException
- 如果任一 collection 為 nullpublic static <T> boolean addAll(Collection<? super T> c, T... elements)
在分別指定元素時,此方法提供了將少數元素添加到現有 collection 中的一個便捷方式:
Collections.addAll(flavors, "Peaches 'n Plutonium", "Rocky Racoon");
c
- 要插入 elements 的 collectionelements
- 插入 c 的元素
UnsupportedOperationException
- 如果 c 不支持 add 操作
NullPointerException
- 如果 elements 套件含一個或多個 null 值並且 c 不允許使用 null 元素,或者 c 或 elements 為 null
IllegalArgumentException
- 如果 elements 中值的某個屬性不允許將它添加到 c 中Collection.addAll(Collection)
public static <E> Set<E> newSetFromMap(Map<E,Boolean> map)
Map
實作的 Set
實作。不必在已經有一個對應 Set
實作(比如 HashMap
或 TreeMap
)的 Map
實作上使用此方法。
每次在此方法返回的 set 上調用方法都將導致在底層實作映射或其 keySet 視圖上調用該方法一次,並伴隨一個異常。addAll 方法是作為底層實作映射上的 put 調用序列實作的。
在調用此方法時,指定映射必須為空,並且不能在此方法返回之後直接存取。如果將映射創建為空,直接傳遞給此方法,並且沒有保留對該映射的參考,則這些條件都可以得到保證,如以下程式碼片段所示:
Set<Object> weakHashSet = Collections.newSetFromMap( new WeakHashMap<Object, Boolean>());
map
- 底層實作映射
IllegalArgumentException
- 如果 map 不為空public static <T> Queue<T> asLifoQueue(Deque<T> deque)
Queue
的形式返回某個 Deque
的視圖。方法 add 被映射到 push,remove 被映射到 pop 等等。在希望使用某一方法獲取一個 Queue 並且需要它具有 Lifo 順序時,此方法很有用。
每次在此方法返回的佇列上調用方法都將導致在底層實作佇列上調用該方法一次,並伴隨一個異常。addAll
方法是作為底層實作佇列上的 addFirst
調用序列實作的。
deque
- 佇列
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。