|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.util.AbstractCollection<E> java.util.AbstractSet<E> java.util.HashSet<E> java.util.LinkedHashSet<E>
E
- 由此 set 維護的元素的型別public class LinkedHashSet<E>
具有可預知迭代順序的 Set 介面的雜湊表和連接列表實作。此實作與 HashSet 的不同之外在於,後者維護著一個運行於所有條目的雙重連接列表。此連接列表定義了迭代順序,即按照將元素插入到 set 中的順序(插入順序)進行迭代。注意,插入順序不 受在 set 中重新插入的 元素的影響。(如果在 s.contains(e) 返回 true 後立即調用 s.add(e),則元素 e 會被重新插入到 set s 中。)
此實作可以讓客戶免遭未指定的、由 HashSet
提供的通常雜亂無章的排序工作,而又不致引起與 TreeSet
關聯的成本增加。使用它可以產生一個與原來順序相同的 set 副本,並且與原 set 的實作無關:
void foo(Set s) { Set copy = new LinkedHashSet(s); ... }如果模組通過輸入得到一個 set,複製這個 set,然後返回由此副本決定了順序的結果,這種情況下這項技術特別有用。(客戶通常期望內容返回的順序與它們出現的順序相同。)
此類別提供所有可選的 Set 操作,並且允許 null 元素。與 HashSet 一樣,它可以為基本操作(add、contains 和 remove)提供穩定的性能,假定雜湊函數將元素正確地分佈到存儲段中。由於增加了維護連接列表的開支,其性能很可能會比 HashSet 稍遜一籌,不過,這一點例外:LinkedHashSet 迭代所需時間與 set 的大小 成正比,而與容量無關。HashSet 迭代很可能支出較大,因為它所需迭代時間與其容量 成正比。
連接的雜湊 set 有兩個影響其性能的參數:初始容量 和載入因子。它們與 HashSet 中的定義極其相同。注意,為初始容量選擇非常高的值對此類別的影響比對 HashSet 要小,因為此類別的迭代時間不受容量的影響。
注意,此實作不是同步的。如果多個執行緒同時存取連接的雜湊 set,而其中至少一個執行緒修改了該 set,則它必須 保持外部同步。這一般通過對自然封裝該 set 的物件進行同步操作來完成。
如果不存在這樣的物件,則應該使用 Collections.synchronizedSet
方法來“包裹”該 set。最好在創建時完成這一操作,以防止意外的非同步存取:
Set s = Collections.synchronizedSet(new LinkedHashSet(...));
此類別的 iterator 方法返回的迭代器是快速失敗 的:在迭代器創建之後,如果對 set 進行修改,除非通過迭代器自身的 remove 方法,其他任何時間任何方式的修改,迭代器都將拋出 ConcurrentModificationException
。因此,面對共時的修改,迭代器很快就會完全失敗,而不冒將來不確定的時間任意發生不確定行為的風險。
注意,迭代器的快速失敗行為不能得到保證,一般來說,存在不同步的共時修改時,不可能作出任何強有力的保證。快速失敗迭代器盡最大努力拋出 ConcurrentModificationException。因此,編寫依賴於此異常的程序的方式是錯誤的,正確做法是:迭代器的快速失敗行為應該僅用於檢測程序錯誤。
此類別是 Java Collections Framework 的成員。
Object.hashCode()
,
Collection
,
Set
,
HashSet
,
TreeSet
,
Hashtable
,
序列化表格建構子摘要 | |
---|---|
LinkedHashSet()
建構一個帶預設初始容量 (16) 和載入因子 (0.75) 的新空連接雜湊 set。 |
|
LinkedHashSet(Collection<? extends E> c)
建構一個與指定 collection 中的元素相同的新連接雜湊 set。 |
|
LinkedHashSet(int initialCapacity)
建構一個帶指定初始容量和預設載入因子 (0.75) 的新空連接雜湊 set。 |
|
LinkedHashSet(int initialCapacity,
float loadFactor)
建構一個帶有指定初始容量和載入因子的新空連接雜湊 set。 |
方法摘要 |
---|
從類別 java.util.HashSet 繼承的方法 |
---|
add, clear, clone, contains, isEmpty, iterator, remove, size |
從類別 java.util.AbstractSet 繼承的方法 |
---|
equals, hashCode, removeAll |
從類別 java.util.AbstractCollection 繼承的方法 |
---|
addAll, containsAll, retainAll, toArray, toArray, toString |
從類別 java.lang.Object 繼承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
從介面 java.util.Set 繼承的方法 |
---|
add, addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toArray |
建構子詳細資訊 |
---|
public LinkedHashSet(int initialCapacity, float loadFactor)
initialCapacity
- 連接雜湊 set 的初始容量loadFactor
- 連接雜湊 set 的初始載入因子
IllegalArgumentException
- 如果初始容量小於零或者載入因子為非正public LinkedHashSet(int initialCapacity)
initialCapacity
- LinkedHashSet 的初始容量
IllegalArgumentException
- 如果初始容量小於零public LinkedHashSet()
public LinkedHashSet(Collection<? extends E> c)
c
- 要將其元素放到此 set 中的 collection
NullPointerException
- 如果指定的 collection 為 null
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。