鴻蒙OS LinkedHashSet

2022-07-26 17:23 更新

LinkedHashSet

java.lang.Object

|---java.util.AbstractCollection<E&

|---|---java.util.AbstractSet<E&

|---|---|---java.util.HashSet<E&

|---|---|---|---java.util.LinkedHashSet<E&

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

Set 接口的哈希表和鏈表實(shí)現(xiàn),具有可預(yù)測(cè)的迭代順序。 此實(shí)現(xiàn)與 HashSet 的不同之處在于它維護(hù)一個(gè)雙向鏈表,該列表貫穿其所有條目。 該鏈表定義了迭代順序,即元素插入集合的順序(插入順序)。 請(qǐng)注意,如果將元素重新插入集合中,則插入順序不受影響。 (如果 s.add(e) 被調(diào)用,而 s.contains(e) 將在調(diào)用之前立即返回 true,則元素 e 被重新插入到集合 s 中。)

此實(shí)現(xiàn)使其客戶免于 HashSet 提供的未指定、通?;靵y的排序,而不會(huì)增加與 TreeSet 相關(guān)的成本。 它可用于生成與原始集合具有相同順序的集合的副本,而不管原始集合的實(shí)現(xiàn)如何:

     void foo(Set s) {
         Set copy = new LinkedHashSet(s);
         ...
     }

如果模塊在輸入上獲取一個(gè)集合,復(fù)制它,然后返回其順序由復(fù)制的順序確定的結(jié)果,則此技術(shù)特別有用。 (客戶通常喜歡以與呈現(xiàn)相同的順序返回物品。)

此類提供所有可選的 Set 操作,并允許 null 元素。 與 HashSet 一樣,它為基本操作(添加、包含和刪除)提供恒定時(shí)間性能,假設(shè)哈希函數(shù)在桶中正確地分散元素。 由于維護(hù)鏈表的額外費(fèi)用,性能可能略低于 HashSet,但有一個(gè)例外:迭代 LinkedHashSet 所需的時(shí)間與集合的大小成正比,而不管其容量如何。 HashSet 的迭代可能會(huì)更昂貴,需要的時(shí)間與其容量成正比。

鏈接哈希集有兩個(gè)影響其性能的參數(shù):初始容量和負(fù)載因子。 它們的定義與 HashSet 一樣。 但是請(qǐng)注意,對(duì)于此類而言,為初始容量選擇過高值的懲罰不如 HashSet 嚴(yán)重,因?yàn)榇祟惖牡鷷r(shí)間不受容量的影響。

請(qǐng)注意,此實(shí)現(xiàn)不同步。 如果多個(gè)線程同時(shí)訪問一個(gè)鏈接的哈希集,并且至少有一個(gè)線程修改了該集,則它必須在外部同步。 這通常是通過在一些自然封裝集合的對(duì)象上同步來完成的。 如果不存在這樣的對(duì)象,則應(yīng)使用 Collections#synchronizedSet 方法“wrapped”該集合。 這最好在創(chuàng)建時(shí)完成,以防止對(duì)集合的意外不同步訪問:

   Set s = Collections.synchronizedSet(new LinkedHashSet(...));

此類的迭代器方法返回的迭代器是快速失敗的:如果在創(chuàng)建迭代器后的任何時(shí)間修改集合,除了通過迭代器自己的 remove 方法之外,迭代器將拋出 ConcurrentModificationException。 因此,面對(duì)并發(fā)修改,迭代器快速而干凈地失敗,而不是在未來不確定的時(shí)間冒任意的、非確定性的行為。

請(qǐng)注意,不能保證迭代器的快速失敗行為,因?yàn)橐话銇碚f,在存在不同步的并發(fā)修改的情況下,不可能做出任何硬保證。 快速失敗的迭代器會(huì)盡最大努力拋出 ConcurrentModificationException。 因此,編寫一個(gè)依賴于這個(gè)異常的正確性的程序是錯(cuò)誤的:迭代器的快速失敗行為應(yīng)該只用于檢測(cè)錯(cuò)誤。

此類是 Java 集合框架的成員。

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
LinkedHashSet() 使用默認(rèn)初始容量 (16) 和加載因子 (0.75) 構(gòu)造一個(gè)新的空鏈接哈希集。
LinkedHashSet(int initialCapacity) 使用指定的初始容量和默認(rèn)加載因子 (0.75) 構(gòu)造一個(gè)新的空鏈接哈希集。
LinkedHashSet(int initialCapacity, float loadFactor) 使用指定的初始容量和負(fù)載因子構(gòu)造一個(gè)新的空鏈接哈希集。
LinkedHashSet(Collection<? extends E> c) 使用與指定集合相同的元素構(gòu)造一個(gè)新的鏈接哈希集。

方法總結(jié)

修飾符和類型 方法 描述
SpliteratorE spliterator() 在此集合中的元素上創(chuàng)建一個(gè)后期綁定和快速失敗的拆分器。
從類 java.util.AbstractCollection 繼承的方法
addAll, containsAll, retainAll, toArray, toArray, toString
從類 java.util.AbstractSet 繼承的方法
equals, hashCode, removeAll
從接口 java.util.Collection 繼承的方法
parallelStream, removeIf, stream
從類 java.util.HashSet 繼承的方法
add, clear, clone, contains, isEmpty, iterator, remove, size
從接口 java.lang.Iterable 繼承的方法
forEach
從類 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

構(gòu)造函數(shù)詳細(xì)信息

LinkedHashSet

public LinkedHashSet(int initialCapacity, float loadFactor)

使用指定的初始容量和負(fù)載因子構(gòu)造一個(gè)新的空鏈接哈希集。

參數(shù):

參數(shù)名稱 參數(shù)描述
initialCapacity 鏈接哈希集的初始容量
loadFactor 鏈接哈希集的負(fù)載因子

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果初始容量小于零,或者負(fù)載因子為非正數(shù)

LinkedHashSet

public LinkedHashSet(int initialCapacity)

使用指定的初始容量和默認(rèn)加載因子 (0.75) 構(gòu)造一個(gè)新的空鏈接哈希集。

參數(shù):

參數(shù)名稱 參數(shù)描述
initialCapacity LinkedHashSet 的初始容量

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果初始容量小于零

LinkedHashSet

public LinkedHashSet()

使用默認(rèn)初始容量 (16) 和加載因子 (0.75) 構(gòu)造一個(gè)新的空鏈接哈希集。

LinkedHashSet

public LinkedHashSet(Collection<? extends E> c)

使用與指定集合相同的元素構(gòu)造一個(gè)新的鏈接哈希集。 鏈接哈希集的初始容量足以容納指定集合中的元素和默認(rèn)加載因子 (0.75)。

參數(shù):

參數(shù)名稱 參數(shù)描述
c 將其元素放入此集合的集合

Throws:

Throw名稱 Throw描述
NullPointerException 如果指定的集合為空

方法詳情

spliterator

public SpliteratorE spliterator()

在此集合中的元素上創(chuàng)建一個(gè)后期綁定和快速失敗的拆分器。

Spliterator 報(bào)告 Spliterator#SIZED、Spliterator#DISTINCT 和 ORDERED。 實(shí)施應(yīng)記錄附加特征值的報(bào)告。

指定者:

接口 CollectionE 中的分離器

指定者:

接口 IterableE 中的分離器

指定者:

接口 SetE 中的分離器

覆蓋:

HashSetE 類中的拆分器

返回:

此集合中元素的拆分器

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)