JavaTM 2 Platform
Standard Ed. 6

java.util
類別 LinkedHashSet<E>

java.lang.Object
  繼承者 java.util.AbstractCollection<E>
      繼承者 java.util.AbstractSet<E>
          繼承者 java.util.HashSet<E>
              繼承者 java.util.LinkedHashSet<E>
型別參數:
E - 由此 set 維護的元素的型別
所有已實作的介面:
Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>

public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, Serializable

具有可預知迭代順序的 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 一樣,它可以為基本操作(addcontainsremove)提供穩定的性能,假定雜湊函數將元素正確地分佈到存儲段中。由於增加了維護連接列表的開支,其性能很可能會比 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 的成員。

從以下版本開始:
1.4
另請參見:
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
 

建構子詳細資訊

LinkedHashSet

public LinkedHashSet(int initialCapacity,
                     float loadFactor)
建構一個帶有指定初始容量和載入因子的新空連接雜湊 set。

參數:
initialCapacity - 連接雜湊 set 的初始容量
loadFactor - 連接雜湊 set 的初始載入因子
拋出:
IllegalArgumentException - 如果初始容量小於零或者載入因子為非正

LinkedHashSet

public LinkedHashSet(int initialCapacity)
建構一個帶指定初始容量和預設載入因子 (0.75) 的新空連接雜湊 set。

參數:
initialCapacity - LinkedHashSet 的初始容量
拋出:
IllegalArgumentException - 如果初始容量小於零

LinkedHashSet

public LinkedHashSet()
建構一個帶預設初始容量 (16) 和載入因子 (0.75) 的新空連接雜湊 set。


LinkedHashSet

public LinkedHashSet(Collection<? extends E> c)
建構一個與指定 collection 中的元素相同的新連接雜湊 set。此連接雜湊 set 的創建使用的初始容量足以容納指定 collection 的元素,使用的載入因子為預設載入因子 (0.75)。

參數:
c - 要將其元素放到此 set 中的 collection
拋出:
NullPointerException - 如果指定的 collection 為 null

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only