Open In App

Java Program to Implement CopyOnWriteArraySet API

Improve
Improve
Like Article
Like
Save
Share
Report

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

 


Last Updated : 30 Sep, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads