It’s very important to differentiate between java.util.HashSet and java.util.concurrent.CopyOnWriteArraySet, so in this Collection framework tutorial we will learn what are differences and similarities between java.util.HashSet and java.util.concurrent.CopyOnWriteArraySet in java.
Contents of page :
- Differences between java.util.HashSet and java.util.concurrent.CopyOnWriteArraySet in java >
- Similarity between java.util.HashSet and java.util.concurrent.CopyOnWriteArraySet in java >
- Program 1 to show
- Program 2 to show
- Iterator and Enumeration returned by java.util.concurrent.CopyOnWriteArraySet are Fail-safe in java
Property
|
java.util.HashSet
|
java.util.concurrent. CopyOnWriteArraySet
| |
1
|
synchronization
|
HashSet is not synchronized (because 2 threads on same HashSet object can access it at same time) in java.
|
CopyOnWriteArraySet is synchronized (because 2 threads on same CopyOnWriteArraySet object cannot access it at same time) in java.
|
2
|
Iterator
|
Iterator returned by HashSet is Fail-fast, means any structural modification made to HashSet during iteration using Iterator will throw ConcurrentModificationException in java.
As shown in Program 1 below.
|
Iterator returned by CopyOnWriteArraySet is Fail-safe in java.
As shown in Program 2 below.
|
3
|
Enumeration is fail-fast
|
Enumeration returned by HashSet is fail-fast, means any structural modification made to HashSet during iteration using Enumeration will throw ConcurrentModificationException.
As shown in Program 1 below.
|
Enumeration returned by CopyOnWriteArraySet is fail-safe.
As shown in Program 2 below.
|
4
|
Iterate using enhanced for loop
|
Iteration done on HashSet using enhanced for loop is Fail-fast, means any structural modification made to HashSet during iteration using enhanced for loop will throw ConcurrentModificationException.
As shown in Program 1 below.
|
Iteration done on CopyOnWriteArraySet using enhanced for loop is Fail-safe.
As shown in Program 2 below.
|
5
|
Performance
|
HashSet is not synchronized, hence its operations are faster as compared to CopyOnWriteArraySet.
|
CopyOnWriteArraySet is synchronized, hence its operations are slower as compared to HashSet.
|
6
|
Introduced in which java version
|
HashSet was introduced in second version of java (1.2) i.e. JDK 2.0
|
CopyOnWriteArraySet was introduced in fifth version of java (1.5) i.e. JDK 5.0
|
7
|
Package
|
java.util
|
java.util.concurrent
|
So far we have learned what are differences between java.util.HashSet and java.util.concurrent.CopyOnWriteArraySet in java.
Now we will learn similarities in java.util.HashSet and java.util.concurrent.CopyOnWriteArraySet in Collection framework in java.
/** Copyright (c), AnkitMittal JavaMadeSoEasy.com */
Similarity between java.util.HashSet and java.util.concurrent.CopyOnWriteArraySet in java >
Property
|
java.util.HashSet and
java.util.concurrent.CopyOnWriteArraySet
| |
1
|
Insertion order
|
HashSet and CopyOnWriteArraySet both does not maintains insertion order in java.
|
2
|
Allows null
|
HashSet and CopyOnWriteArraySet both allows to store one null in java.
|
3
|
Implements java.util.Set
|
HashSet and CopyOnWriteArraySet both are implementation of the java.util.Set interface and extends AbstractSet (Abstract class).
|
4
|
Structure and resizable
|
Hence, structure is map based and resizing depends on Map implementation in java.
|
5
|
Duplicate elements
|
HashSet and CopyOnWriteArraySet both does not allow to store duplicate elements in java.
|
Example/Program 1 to show
Iterator and Enumeration returned by HashSet are Fail-fast, means any structural modification made to HashSet during iteration will throw ConcurrentModificationException.
Also, iteration done on HashSet using enhanced for loop is Fail-fast.
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetExample {
public static void main(String args[]){
Set<String> hashSet=new HashSet<String>();
hashSet.add("audi");
//fail-fast
Iterator<String> iterator=hashSet.iterator();
while(iterator.hasNext()){
hashSet.add("newElement1"); //unComment to avoid ConcurrentModificationException
System.out.println(iterator.next());
}
//fail-fast
Enumeration<String> listEnum=Collections.enumeration(hashSet);
while(listEnum.hasMoreElements()){
hashSet.add("newElement2"); //unComment to avoid ConcurrentModificationException
System.out.println(listEnum.nextElement());
}
//enhanced for loop is fail-fast
for(String string:hashSet){
hashSet.add("newElement3"); //unComment to avoid ConcurrentModificationException
System.out.println(string);
}
}
}
|
In above program structural modification was made to HashSet during iteration, and that didn’t throwed ConcurrentModificationException.
Example/Program 2 to show
Iterator and Enumeration returned by CopyOnWriteArraySet are Fail-safe, means any structural modification made to CopyOnWriteArraySet during iteration does not throw any exception.
Also, iteration done on CopyOnWriteArraySet using enhanced for loop is Fail-safe.
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
public class CopyOnWriteArraySetExample {
public static void main(String args[]){
Set<String> copyOnWriteArraySet=new CopyOnWriteArraySet<String>();
copyOnWriteArraySet.add("audi");
//fail-safe
Iterator<String> iterator=copyOnWriteArraySet.iterator();
while(iterator.hasNext()){
copyOnWriteArraySet.add("newElement1");
System.out.println(iterator.next());
}
//fail-safe
Enumeration<String> listEnum=Collections.enumeration(copyOnWriteArraySet);
while(listEnum.hasMoreElements()){
copyOnWriteArraySet.add("newElement2");
System.out.println(listEnum.nextElement());
}
//enhanced for loop is fail-safe
for(String string:copyOnWriteArraySet){
copyOnWriteArraySet.add("newElement3");
System.out.println(string);
}
}
}
|
In above program structural modification was made to CopyOnWriteArraySet during iteration, but that didn’t throw ConcurrentModificationException in java.
So in this Collection framework tutorial we learned what are differences and similarities between java.util.HashSet and java.util.concurrent.CopyOnWriteArraySet in java.
Having any doubt? or you you liked the tutorial! Please comment in below section.
Please express your love by liking JavaMadeSoEasy.com (JMSE) on facebook, following on google+ or Twitter.
RELATED LINKS>
Collection - List, Set and Map all properties in tabular form in java
Set hierarchy tutorial in java - Detailed - java.util.HashSet, java.util.concurrent.CopyOnWriteArraySet, java.util.LinkedHashSet, java.util.TreeSet, java.util.concurrent.ConcurrentSkipListSet, java.util.EnumSet classes
List vs Set in java - Similarity and Differences
Important Similarity and Differences Collection classes in concurrent and non-concurrent packages in java >