src/share/classes/java/util/concurrent/CopyOnWriteArraySet.java

Print this page

        

@@ -105,13 +105,20 @@
      *
      * @param c the collection of elements to initially contain
      * @throws NullPointerException if the specified collection is null
      */
     public CopyOnWriteArraySet(Collection<? extends E> c) {
+        if (c.getClass() == CopyOnWriteArraySet.class) {
+            CopyOnWriteArraySet<E> s = (CopyOnWriteArraySet<E>) c;
+            al = (CopyOnWriteArrayList<E>) s.al.clone();
+        } else if (c instanceof Set) {
+            al = new CopyOnWriteArrayList<E>(c);
+        } else {
         al = new CopyOnWriteArrayList<E>();
         al.addAllAbsent(c);
     }
+    }
 
     /**
      * Returns the number of elements in this set.
      *
      * @return the number of elements in this set