<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Java `CopyOnWriteArraySet`類 > 原文: [https://howtodoinjava.com/java/collections/java-copyonwritearrayset/](https://howtodoinjava.com/java/collections/java-copyonwritearrayset/) Java `CopyOnWriteArraySet`是[**`HashSet`**](https://howtodoinjava.com/java/collections/java-hashset/)的[線程安全](https://howtodoinjava.com/java/multi-threading/what-is-thread-safety/)變體,其所有操作均使用基礎`CopyOnWriteArrayList`。 與`CopyOnWriteArrayList`類似,它的**不可變快照式**[迭代器](https://howtodoinjava.com/java/collections/java-iterator/)方法在創建迭代器時使用對數組狀態(在后備列表內)的引用。 這在遍歷操作遠遠超過集合更新操作且我們不想同步遍歷并且在更新集合時仍希望線程安全的用例中很有用。 ```java Table of Contents 1\. CopyOnWriteArraySet Hierarchy 2\. CopyOnWriteArraySet Features 3\. CopyOnWriteArraySet Example 4\. CopyOnWriteArraySet Constructors 5\. CopyOnWriteArraySet Methods 6\. CopyOnWriteArraySet Usecases 7\. CopyOnWriteArraySet Performance 8\. Conclusion ``` ## 1\. `CopyOnWriteArraySet`層次結構 `CopyOnWriteArraySet`類擴展了`AbstractSet`類并實現了`Serializable`接口。 ```java public class CopyOnWriteArraySet<E> extends AbstractSet<E> implements Serializable { private final CopyOnWriteArrayList<E> al; //implementation } ``` ## 2\. `CopyOnWriteArraySet`特性 有關 Java `CopyOnWriteArraySet`類的重要知識是: * 作為正常設置的數據結構,它不允許重復。 * `CopyOnWriteArraySet`類實現`Serializable`接口并擴展`AbstractSet`類。 * 使用`CopyOnWriteArraySet`進行更新操作成本很高,因為每個突變都會創建基礎數組的克隆副本并向其添加/更新元素。 * 它是`HashSet`的線程安全版本。 每個訪問該集合的線程在初始化此集合的迭代器時都會看到自己創建的后備數組快照版本。 * 因為它在創建迭代器時獲取基礎數組的快照,所以它不會拋出`ConcurrentModificationException`。 * 不支持迭代器上的變異操作。 這些方法拋出`UnsupportedOperationException`。 * `CopyOnWriteArraySet`是**同步集**的并發替代,并且在迭代次數超過突變次數時提供了更好的并發性。 * 它允許重復的元素和異構對象(使用泛型來獲取編譯時錯誤)。 * 因為它每次創建迭代器時都會創建基礎數組的新副本,所以**性能比`HashSet`慢**。 ## 3\. Java `CopyOnWriteArraySet`示例 Java 程序,用于顯示在不同時間創建的迭代器如何查看`CopyOnWriteArraySet`中集合的快照版本。 在給定的示例中,當列表具有元素(`1,2,3`)時,我們首先創建了`list`和`itr1`。 然后,我們在列表中添加了另一個元素,并再次創建了一個迭代器`itr2`。 最后,我們驗證了兩個迭代器中的元素。 ```java CopyOnWriteArraySet<Integer> set = new CopyOnWriteArraySet<>(Arrays.asList(1,2,3)); System.out.println(set); //[1, 2, 3] //Get iterator 1 Iterator<Integer> itr1 = set.iterator(); //Add one element and verify set is updated set.add(4); System.out.println(set); //[1, 2, 3, 4] //Get iterator 2 Iterator<Integer> itr2 = set.iterator(); System.out.println("====Verify Iterator 1 content===="); itr1.forEachRemaining(System.out :: println); //1,2,3 System.out.println("====Verify Iterator 2 content===="); itr2.forEachRemaining(System.out :: println); //1,2,3,4 ``` 程序輸出。 ```java [1, 2, 3] [1, 2, 3, 4] ====Verify Iterator 1 content==== 1 2 3 ====Verify Iterator 2 content==== 1 2 3 4 ``` ## 4\. `CopyOnWriteArraySet`構造器 * **`CopyOnWriteArraySet()`**:創建一個空集。 * **`CopyOnWriteArraySet(Collection c)`**:創建一個包含指定集合元素的集合,其順序由集合的迭代器返回。 ## 5\. `CopyOnWriteArraySet`方法 * **`boolean add(object o)`**:如果指定的元素尚不存在,則將其添加到此集合中。 * **`boolean addAll(collection c)`**:將指定集合中的所有元素(如果尚不存在)添加到此集合中。 * **`void clear()`**:從該集合中刪除所有元素。 * **`boolean contains(Object o)`**:如果此集合包含指定的元素,則返回 true。 * **`boolean isEmpty()`**:如果此集合不包含任何元素,則返回 true。 * **`Iterator iterator()`**:以添加這些元素的順序在此集合中包含的元素上返回一個迭代器。 * **`boolean remove(Object o)`**:如果存在指定元素,則從此集合中刪除該元素。 * **`int size()`**:返回此集合中的元素數。 ## 6\. Java `CopyOnWriteArraySet`用例 在集大小通常保持較小的應用程序中使用`CopyOnWriteArraySet`,只讀操作大大超過了可變操作,并且您需要防止遍歷期間線程之間的干擾。 `CopyOnWriteArraySet`有助于最小化程序員控制的同步步驟,并將控制權移交給經過良好測試的內置 API。 ## 7\. Java `CopyOnWriteArraySet`性能 由于每次更新集時都會增加創建新支持數組的步驟,因此其性能比`HashSet`差。 讀取操作沒有性能開銷,并且兩個類執行相同的操作。 ## 8\. 總結 在本 Java 集合教程中,我們學習了使用`CopyOnWriteArraySet`類,其構造器,方法和用例。 我們了解了在 Java 中`CopyOnWriteArraySet`的內部工作原理,以及`CopyOnWriteArraySet`與`CopyOnWriteArrayList`的工作原理。 我們通過 **Java `CopyOnWriteArraySet`示例程序**演示了快照迭代器的工作方式。 在評論中把您的問題交給我。 學習愉快! 參考: [`CopyOnWriteArraySet` Java 文檔](https://docs.oracle.com/javase/10/docs/api/java/util/concurrent/CopyOnWriteArraySet.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>

                              哎呀哎呀视频在线观看