It’s very important to differentiate between java.util.TreeSet and java.util.concurrent.ConcurrentSkipListSet, so in this Collection framework tutorial we will learn what are differences and similarities between java.util.TreeSet and java.util.concurrent.ConcurrentSkipListSet in java.
Contents of page :
- Differences between java.util.TreeSet and java.util.concurrent.ConcurrentSkipListSet in java >
- Similarity between java.util.TreeSet and java.util.concurrent.ConcurrentSkipListSet in java >
- Program 1 to show
- Program 2 to show
- Iterator and Enumeration returned by ConcurrentSkipListSet are Fail-safe in java.
Property
|
java.util.TreeSet
|
java.util.concurrent. ConcurrentSkipListSet
| |
1
|
synchronization
|
TreeSet is not synchronized (because 2 threads on same TreeSet object can access it at same time) in java.
|
ConcurrentSkipListSet is synchronized (because 2 threads on same ConcurrentSkipListSet object cannot access it at same time) in java.
|
2
|
Iterator
|
Iterator returned by TreeSet is Fail-fast, means any structural modification made to TreeSet during iteration using Iterator will throw ConcurrentModificationException in java.
As shown in Program 1 below.
|
Iterator returned by ConcurrentSkipListSet is Fail-safe in java.
As shown in Program 2 below.
|
3
|
Enumeration is fail-fast
|
Enumeration returned by TreeSet is fail-fast, means any structural modification made to TreeSet during iteration using Enumeration will throw ConcurrentModificationException.
As shown in Program 1 below.
|
Enumeration returned by ConcurrentSkipListSet is fail-safe.
As shown in Program 2 below.
|
4
|
Iterate using enhanced for loop
|
Iteration done on TreeSet using enhanced for loop is Fail-fast, means any structural modification made to TreeSet during iteration using enhanced for loop will throw ConcurrentModificationException.
As shown in Program 1 below.
|
Iteration done on ConcurrentSkipListSet using enhanced for loop is Fail-safe.
As shown in Program 2 below.
|
5
|
Performance
|
TreeSet is not synchronized, hence its operations are faster as compared to ConcurrentSkipListSet.
|
ConcurrentSkipListSet is synchronized, hence its operations are slower as compared to TreeSet.
|
6
|
Introduced in which java version
|
TreeSet was introduced in second version of java (1.2) i.e. JDK 2.0
|
ConcurrentSkipListSet was introduced in sixth version of java (1.6) i.e. JDK 6.0
|
7
|
Package
|
java.util
|
java.util.concurrent
|
So far we have learned what are differences between java.util.TreeSet and java.util.concurrent.ConcurrentSkipListSet in java.
Now we will learn similarities in java.util.TreeSet and java.util.concurrent.ConcurrentSkipListSet in Collection framework in java.
/** Copyright (c), AnkitMittal JavaMadeSoEasy.com */
Similarity between java.util.TreeSet and java.util.concurrent.ConcurrentSkipListSet in java >
Property
|
java.util.TreeSet and
java.util.concurrent.ConcurrentSkipListSet
| |
1
|
Insertion order
|
TreeSet and ConcurrentSkipListSet both are sorted by natural order.
Example >
set.add("b");
set.add("c");
set.add("a");
Output >
a
b
c
|
2
|
Allows null
|
TreeSet and ConcurrentSkipListSet both does not allows to store null.
Any attempt to add null throws runtimeException (NullPointerException).
|
3
|
Implements java.util.Set
|
NavigableSet interface and extends AbstractSet (Abstract class).
|
4
|
Structure and resizable
|
Hence, structure is map based and resizing depends on Map implementation.
|
5
|
Duplicate elements
|
TreeSet and ConcurrentSkipListSet both does not allow to store duplicate elements.
|
Example/Program 1 to show
Iterator and Enumeration returned by TreeSet are Fail-fast, means any structural modification made to TreeSet during iteration will throw ConcurrentModificationException in java.
Also, iteration done on TreeSet using enhanced for loop is Fail-fast in java.
import java.util.Collections;
import java.util.Enumeration;
import java.util.TreeSet;
import java.util.Iterator;
import java.util.Set;
public class TreeSetExample {
public static void main(String args[]){
Set<String> treeSet=new TreeSet<String>();
treeSet.add("audi");
//fail-fast
Iterator<String> iterator=treeSet.iterator();
while(iterator.hasNext()){
treeSet.add("newElement1"); //unComment to avoid ConcurrentModificationException
System.out.println(iterator.next());
}
//fail-fast
Enumeration<String> listEnum=Collections.enumeration(treeSet);
while(listEnum.hasMoreElements()){
treeSet.add("newElement2"); //unComment to avoid ConcurrentModificationException
System.out.println(listEnum.nextElement());
}
//enhanced for loop is fail-fast
for(String string:treeSet){
treeSet.add("newElement3"); //unComment to avoid ConcurrentModificationException
System.out.println(string);
}
}
}
|
In above program structural modification was made to TreeSet during iteration, and that didn’t throwed ConcurrentModificationException.
Example/Program 2 to show
Iterator and Enumeration returned by ConcurrentSkipListSet are Fail-safe, means any structural modification made to ConcurrentSkipListSet during iteration does not throw any exception.
Also, iteration done on ConcurrentSkipListSet using enhanced for loop is Fail-safe in java.
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.ConcurrentSkipListSet;
public class ConcurrentSkipListSetExample {
public static void main(String args[]){
Set<String> concurrentSkipListSet=new ConcurrentSkipListSet<String>();
concurrentSkipListSet.add("audi");
//fail-safe
Iterator<String> iterator=concurrentSkipListSet.iterator();
while(iterator.hasNext()){
concurrentSkipListSet.add("newElement1");
System.out.println(iterator.next());
}
//fail-safe
Enumeration<String> listEnum=Collections.enumeration(concurrentSkipListSet);
while(listEnum.hasMoreElements()){
concurrentSkipListSet.add("newElement2");
System.out.println(listEnum.nextElement());
}
//enhanced for loop is fail-safe
for(String string:concurrentSkipListSet){
concurrentSkipListSet.add("newElement3");
System.out.println(string);
}
}
}
|
In above program structural modification was made to ConcurrentSkipListSet 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.TreeSet and java.util.concurrent.ConcurrentSkipListSet 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
Important Similarity and Differences in java >
List Differences in java >
ArrayList vs LinkedList - Similarity and Differences in java
ArrayList vs Vector - Similarity and Differences in java
List vs Set - Similarity and Differences in java
Important Similarity and Differences Collection classes in concurrent and non-concurrent packages >