<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Java `LinkedHashSet`類 > 原文: [https://howtodoinjava.com/java/collections/java-linkedhashset/](https://howtodoinjava.com/java/collections/java-linkedhashset/) Java `LinkedHashSet`類擴展了`HashSet`和實現了`Set`接口。 除了提供***可預測的迭代順序***以外,它與[`HashSet`](https://howtodoinjava.com/java/collections/java-hashset/)類非常相似。 ```java Table of Contents 1\. LinkedHashSet Hierarchy 2\. LinkedHashSet Features 3\. LinkedHashSet Constructors 4\. LinkedHashSet Methods 5\. LinkedHashSet Example 6\. LinkedHashSet Usecases 7\. LinkedHashSet Performance 8\. Conclusion ``` ## 1\. `LinkedHashSet`層次結構 `LinkedHashSet`類擴展了`HashSet`類并實現了`Set`接口。 `Set`接口以層次結構順序繼承`Collection`和`Iterable`接口。 ```java public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable { //implementation } ``` ![LinkedHashSet Hierarchy](https://img.kancloud.cn/57/1a/571a64a47a2747e5f93dbf0ec1ee9613_571x322.png) `LinkedHashSet`層次結構 ## 2\. `LinkedHashSet`特性 * 它擴展了`HashSet`類,擴展了`AbstractSet`類。 * 它實現了`Set`接口。 * **`LinkedHashSet`中不允許重復的值**。 * `LinkedHashSet`中允許一個`NULL`元素。 * 這是一個**有序集合**,這是元素插入到集合中的順序(**插入順序**)。 * 與`HashSet`一樣,此類為基本操作(添加,刪除,包含和調整大小)提供**恒定時間性能**。 * `LinkedHashSet`未同步。 如果多個線程同時訪問哈希集合,并且至少有一個線程修改了哈希集合,則必須在外部對其進行同步。 * 使用**`Collections.synchronizedSet(new LinkedHashSet())`**方法來獲取同步的`LinkedHashSet`。 * 此類的迭代器方法返回的迭代器為**快速失敗**,并且如果在創建迭代器后的任何時間修改了集合,則可能會拋出`ConcurrentModificationException`,除了通過迭代器自己的`remove()`方法之外 。 * `LinkedHashSet`還實現了`Searlizable`和 [`Cloneable`](https://howtodoinjava.com/java/cloning/a-guide-to-object-cloning-in-java/)接口。 #### 2.1 初始容量 初始容量是指創建`LinkedHashSet`時的存儲桶數(在支持[`HashMap`](https://howtodoinjava.com/java-hashmap/)中)。 如果當前大小已滿,則存儲桶數將自動增加。 默認初始容量為 **16** 。 我們可以通過在構造器 `LinkedHashSet(int initialCapacity)`中傳遞默認容量來覆蓋此默認容量。 #### 2.2 負載系數 負載因子是在自動增加`LinkedHashSet`的容量之前允許其充滿的度量。 默認負載系數為 **0.75** 。 這稱為**閾值**,等于(`DEFAULT_LOAD_FACTOR * DEFAULT_INITIAL_CAPACITY`)。 當`LinkedHashSet`元素計數超過此閾值時,將調整`LinkedHashSet`的大小,并且新容量是先前容量的兩倍。 使用默認的`LinkedHashSet`時,內部容量為 16,負載系數為 0.75。 當表格中有 12 個元素時,存儲桶數將自動增加。 ## 3\. `LinkedHashSet`構造器 `LinkedHashSet`具有四種構造器: 1. **`LinkedHashSet()`**:使用默認的初始容量(16)和負載因子(0.75)初始化默認的`LinkedHashSet`實例。 2. **`LinkedHashSet(int Capacity)`**:使用指定的容量和負載因子(0.75)初始化`LinkedHashSet`。 3. **`LinkedHashSet(int Capacity, float loadFactor)`**:使用指定的初始容量和負載因子初始化`LinkedHashSet`。 4. **`LinkedHashSet(Collection c)`**:使用與指定集合相同的元素初始化`LinkedHashSet`。 ## 4\. `LinkedHashSet`方法 1. **`public boolean add(E e)`**:如果指定的元素尚不存在,則將其添加到`Set`中。 此方法在內部使用 **`equals()`**方法檢查重復項。 如果元素重復,則元素被拒絕,并且不替換值。 2. **`public void clear()`**:從`LinkedHashSet`中刪除所有元素。 3. **`public boolean contains(Object o)`**:如果`LinkedHashSet`包含指定的元素則返回`true`,否則為`false`。 4. **`public boolean isEmpty()`**:如果`LinkedHashSet`不包含任何元素,則返回`true`,否則返回`false`。 5. **`public int size()`**:返回`LinkedHashSet`中的元素數。 6. **`public Iterator<E> iterator()`**:在此`LinkedHashSet`中的元素上返回迭代器。 從迭代器返回的元素沒有特定的順序。 7. **`public boolean remove(Object o)`**:從`LinkedHashSet`中刪除指定的元素(如果存在)并返回`true`,否則返回`false`。 8. **`public boolean removeAll(Collection <?> c)`**:刪除`LinkedHashSet`中屬于指定集合的??所有元素。 9. **public Object clone()**:返回`LinkedHashSet`的淺表副本。 10. **`public Spliterator<E> spliterator()`**:在此`LinkedHashSet`中的元素上創建后綁定和快速失敗的`Spliterator`。 它具有以下初始化屬性`Spliterator.DISTINCT`和`Spliterator.ORDERED`。 ## 5\. `LinkedHashSet`示例 #### 5.1 `LinkedHashSet`添加,刪除,迭代器示例 ```java //1\. Create LinkedHashSet LinkedHashSet<String> LinkedHashSet = new LinkedHashSet<>(); //2\. Add elements to LinkedHashSet LinkedHashSet.add("A"); LinkedHashSet.add("B"); LinkedHashSet.add("C"); LinkedHashSet.add("D"); LinkedHashSet.add("E"); System.out.println(LinkedHashSet); //3\. Check if element exists boolean found = LinkedHashSet.contains("A"); //true System.out.println(found); //4\. Remove an element LinkedHashSet.remove("D"); //5\. Iterate over values Iterator<String> itr = LinkedHashSet.iterator(); while(itr.hasNext()) { String value = itr.next(); System.out.println("Value: " + value); } ``` 程序輸出。 ```java [A, B, C, D, E] true Value: A Value: B Value: C Value: E ``` #### 5.2 將`LinkedHashSet`轉換為數組示例 Java 示例,使用`toArrray()`方法將`LinkedHashSet`轉換為數組。 ```java LinkedHashSet<String> LinkedHashSet = new LinkedHashSet<>(); LinkedHashSet.add("A"); LinkedHashSet.add("B"); LinkedHashSet.add("C"); LinkedHashSet.add("D"); LinkedHashSet.add("E"); String[] values = new String[LinkedHashSet.size()]; LinkedHashSet.toArray(values); System.out.println(Arrays.toString(values)); ``` 程序輸出: ```java [A, B, C, D, E] ``` #### 5.3 將`LinkedHashSet`轉換為`ArrayList`示例 使用[*Java 8 流 API*](https://howtodoinjava.com/java8/java-8-tutorial-streams-by-examples/)將`LinkedHashSet`轉換為`arraylist`的 Java 示例。 ```java LinkedHashSet<String> LinkedHashSet = new LinkedHashSet<>(); LinkedHashSet.add("A"); LinkedHashSet.add("B"); LinkedHashSet.add("C"); LinkedHashSet.add("D"); LinkedHashSet.add("E"); List<String> valuesList = LinkedHashSet.stream().collect(Collectors.toList()); System.out.println(valuesList); ``` 程序輸出: ```java [A, B, C, D, E] ``` ## 6\. `LinkedHashSet`用例 `LinkedHashSet`非常類似于[**`ArrayList`**](https://howtodoinjava.com/java-arraylist/)(有序)和`HashSet`(唯一元素)。 此外,它還保證了元素的迭代順序(按插入元素的順序)。 `LinkedHashSet`的實際用例可以存儲流中的數據,其中流可能包含按所需順序的重復記錄,我們只對不同的記錄感興趣,但順序完全相同。 另一個用例是在給定的句子中找到不同的單詞,并且單詞的順序應該固定,因為它們出現在句子中。 ## 7\. `LinkedHashSet`性能 * `LinkedHashSet`類為基本操作(添加,刪除,包含和大小)提供`O(1)`的**恒定時間性能**,假設哈希函數將元素正確分散在存儲桶中。 * 由于維護鏈表(除了一個迭代例外)會增加開銷,因此性能可能會略低于`HashSet`。 在`LinkedHashSet`上進行迭代需要的時間與集合的大小成正比,而不管其容量如何。 在`HashSet`上進行迭代可能會更昂貴,需要的時間與其容量成正比。 因此,`LinkedHashSet`可以在迭代時提供比`HashSet`更好的性能。 ## 8\. 總結 從上面的討論中可以明顯看出,`LinkedHashSet`在我們要以某種固定順序處理重復記錄的情況下是非常有用的集合類。 它為基本操作提供了可預測的性能。 如果不需要元素的迭代順序,則建議改用較輕量的`HashSet`和`HashMap`。 在評論中向我發送與 Java 中的 **`LinkedHashSet`有關的問題。** 學習愉快! 參考: [`LinkedHashSet` Java 文檔](https://docs.oracle.com/javase/10/docs/api/java/util/LinkedHashSet.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看