Open In App

Java Program to Implement CopyOnWriteArraySet API

Last Updated : 30 Sep, 2022
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

 


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads