CopyOnWriteArraySet is a member of the Java Collections Framework. It is a Set that uses an internal CopyOnWriteArrayList for all of its operations. It was introduced in JDK 1.5, we can say that it is a thread-safe version of Set. To use this class, we need to import it from java.util.concurrent package.
Implementation:
Example
Java
// Java Program to Implement CopyOnWriteArraySet API // Importing required utility classes // from java.util package import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; // CopyOnWriteArraySetImpl public class <E> GFG { private CopyOnWriteArraySet<E> copyOnWriteArraySet; // Constructor of this class public GFG() { // Creating an empty set copyOnWriteArraySet = new CopyOnWriteArraySet<E>(); } // Creates a set containing all of the elements // of the specified collection public GFG(Collection<? extends E> c) { copyOnWriteArraySet = new CopyOnWriteArraySet<E>(c); } // Method // To add the specified element into list // if not already present public boolean add(E eobj) { return copyOnWriteArraySet.add(eobj); } // Method // Returning true if there is a specified element // present in the list public boolean contains(Object obj) { return copyOnWriteArraySet.contains(obj); } // Method // Returning true if the set is empty public boolean isEmpty() { return copyOnWriteArraySet.isEmpty(); } // Method // To traverse over the elements // present in the set public Iterator<E> iterator() { return copyOnWriteArraySet.iterator(); } // Method // To remove the specified element // present in the Set public boolean remove(Object obj) { return copyOnWriteArraySet.remove(obj); } // Method // Returning the number of elements // present in the set public int size() { return copyOnWriteArraySet.size(); } // Method // Removing all elements from the given set public void clear() { copyOnWriteArraySet.clear(); } // Method // Returning an array containing all of the elements // present in this set public Object[] toArray() { return copyOnWriteArraySet.toArray(); } // Method // Now, adding all of the elements in the specified // collection to this set if they're not already present public boolean addAll(Collection<? extends E> c) throws UnsupportedOperationException, ClassCastException, NullPointerException, IllegalArgumentException { return copyOnWriteArraySet.addAll(c); } // Method // Returns only the elements in this set that are // contained in the specified collection public boolean retainAll(Collection<?> c) throws UnsupportedOperationException, ClassCastException, NullPointerException { return copyOnWriteArraySet.retainAll(c); } // Method // Removes from this set the elements that are contained // in the specified collection public boolean removeAll(Collection<?> c) throws UnsupportedOperationException, NullPointerException, ClassCastException { return copyOnWriteArraySet.retainAll(c); } // Returns an array containing all of the elements in // this set. public <T> T[] toArray(T[] a) throws ArrayStoreException, NullPointerException { return copyOnWriteArraySet.toArray(a); } // Method // Main driver Method public static void main(String args[]) { // Creating an object of above class (GFG class) // Declaring object of integer type GFG<Integer> copyOnWriteArraySet = new GFG<Integer>(); // Adding custom input elements after condition // check // Custom input elements are added // using the add() method if (copyOnWriteArraySet.add( 12 )) System.out.println( "Element 12 added to Set" ); if (copyOnWriteArraySet.add( 13 )) System.out.println( "Element 13 added to Set" ); if (copyOnWriteArraySet.add( 14 )) System.out.println( "Element 14 added to Set" ); if (copyOnWriteArraySet.add( 15 )) System.out.println( "Element 15 added to Set" ); // Print and display the current size of Set System.out.println( "The size of copyOnWriteArraySet is " + copyOnWriteArraySet.size()); // Checking whether the Set contains element // using the contains() method if (copyOnWriteArraySet.contains( 14 )) System.out.println( "The copyOnWriteArraySet contains 14" ); else System.out.println( "The copyOnWriteArraySet does not contain 14" ); // Removing element from the Set // using remove() method if (copyOnWriteArraySet.remove( 13 )) // Print desired element is removed System.out.println( "Element 13 removed" ); else // Print desired element is not removed System.out.println( "Element 13 not removed" ); // Now, print and display the elements System.out.println( "The element of copyOnWriteArraySet are" ); Iterator<Integer> iterator = copyOnWriteArraySet.iterator(); // Condition holds true till there is // single element remaining while (iterator.hasNext()) { // Print and display all elements size System.out.print(iterator.next() + "\t" ); } // Appending a new line for better readability System.out.println(); // Creating an object of Set class of integer type Set<Integer> removedSet = new HashSet<Integer>(); // Custom input entries to above Set removedSet.add( 12 ); removedSet.add( 13 ); // Display message only System.out.println( "The elements after removing" ); // removeAll() method wipes off all elements // that was present in Set object copyOnWriteArraySet.removeAll(removedSet); // Iterator to traverse the elements Iterator<Integer> riterator = copyOnWriteArraySet.iterator(); // Again condition holds true till there is // single element remaining in the List while (riterator.hasNext()) { // Printing the elements in the object // using the next() method System.out.print(riterator.next() + "\t" ); } // New line System.out.println(); // Removing all elements from the Set using clear() // method copyOnWriteArraySet.clear(); // Display message to showcase all elements are // removed System.out.println( "copyOnWriteArraySet Elements are completely removed" ); // Lastly, verifying whether the Set is empty or not if (copyOnWriteArraySet.isEmpty()) // Print statement if no elements in Set System.out.println( "copyOnWriteArraySet is empty" ); else // Print statement if elements found in Set System.out.println( "copyOnWriteArraySet is not empty" ); } } |
Output:
Element 12 added to Set Element 13 added to Set Element 14 added to Set Element 15 added to Set The size of copyOnWriteArraySet is 4 The copyOnWriteArraySet contains 14 Element 13 removed The element of copyOnWriteArraySet are 12 14 15 The elements after removing 12 copyOnWriteArraySet Elements are completely removed copyOnWriteArraySet is empty