Friday, April 19, 2024
HomeJavaDistinction between HashSet, TreeSet, and LinkedHashSet in Java

Distinction between HashSet, TreeSet, and LinkedHashSet in Java


Whats up guys, within the final article, we’ve got realized about
distinction between HashMap, TreeMap, and LinkedHashMap

and on this article, we’re going to find out about distinction between HashSet,
TreeSet, and LinkedHashSet in Java, one other common Java interview questions
for 1 to 2 years skilled builders. If you’re doing Java growth work then you already know that LinkedHashSet, TreeSet, and HashSet
are three of the preferred implementations of the Set interface within the Java
Assortment Framework. Since they implement a Set interface, they observe its contracts for not permitting duplicates however there’s a key distinction between them when it comes to ordering of components. For instance, HashSet does not preserve any order, while TreeSet hold components within the sorted order specified by exterior Comparator or comparability logic outlined within the objects’  pure order. Equally, LinkedHashSet hold the weather into the order they’re inserted.  
On this Java Assortment tutorial, we’ll see the
distinction between LinkedHashSet vs TreeSet vs HashSet on completely different
factors e.g. velocity, efficiency, ordering, synchronization, and many others. Primarily based upon
these variations we will additionally determine
when to make use of LinkedHashSet vs TreeSet vs HashSet in Java.

TL;DR, Use
HashSet for all normal objective utilization i.e. the place it is advisable retailer solely distinctive
components with none ordering requirement. If it is advisable preserve order in
which components are added into Set then use
LinkedHashSet, it gives ordering with little influence on efficiency.

You an additionally use TreeSet while you completely have to hold components in particularly sorted order like
protecting workers in rising order of their age or wage.

Bear in mind,
TreeSet is considerably slower than
LinkedHashSet and
HashSet due to this sorting overhead. BTW, in case you are getting ready for Java
interviews, I counsel having a look at Java Programming Interview Uncovered
by Markham. One can find numerous such questions with a really detailed
reply.

Distinction between HashSet vs TreeSet vs LinkedHashSet in Java

Earlier than evaluating them, let’s examine some similarities between them. All of them
implement Set and Assortment interface, to allow them to be handed to a way that
accepts Set as an argument. Although all of them are set, they differ of their
implementation like LinkedHashSet
is backed by
linked checklist and HashMap,
TreeSet is carried out as TreeMap until Java 5 and now utilizing
NavigableMap
from Java 6 onward, and
HashSet
can be backed by
HashMap
in Java. 

Now let’s examine some comparability between them :

1. Synchronization

All three i.e.
HashSet,
TreeSet, and
LinkedHashSet are
not synchronized. They cannot be shared between a number of threads till particularly
synchronized. It is easy to create a synchronized Set, although, all it is advisable
do is use
java.util.Collections
utility class as proven beneath :

Synchronizing HashSet in Java

Set s = Collections.synchronizedSet(new HashSet(...));

Synchronizing LinkedHashSet in Java

Set s = Collections.synchronizedSet(new LinkedHashSet(...));

Synchronizing TreeSet in Java

Set s = Collections.synchronizedSet(new TreeSet(...));

2. Ordering

HashSet does not assure any order, whereas
TreeSet kinds all object-based upon there pure ordering by utilizing the compareTo()
technique, or customized order by utilizing
examine()
technique of  Comparator handed to them. 

Then again, LinkedHashSet additionally gives ordering help to maintain components within the order they’re added
into the Assortment. 

Truly, this property can be derived from the truth that they’re backed by
respective Map implementation. You’ll be able to additional see the
distinction between HashSet and HashMap
for few extra particulars on these two lessons.

3. Null Aspect

This property will be deduced type
HashMap,
LinkedHashMap, and
TreeMap
since HashSet internally makes use of HashMap, LinkedHashSet internally makes use of
LinkedHashMap
and TreeSet internally makes use of
TreeMap

Each HashMap and LinkedHashMap permit one null key and so are these two Set
implementations.

Then again, since
TreeMap does not permit null keys, TreeSet does not permit null components and throws
java.lang.NullPointerException when
you attempt to add a null object. The principle cause of that is the usage of
compareTo() and examine() technique, which throws NullPointerException if one component is null, however it actually
is determined by implementation.

4. Implementation

HashSet internally makes use of a
HashMap with dummy worth object, whereas
LinkedHashSet makes use of a
LinkedHashMap to ensure insertion order. If you iterate by
HashSet order is unpredictable however while you iterate by
LinkedHashSet, you iterate components within the order they’re added. TreeSet is backed by a
navigable Map,
as proven beneath :

Supply code of HashSet

 public HashSet(int initialCapacity) {
   map = new HashMap<E,Object>(initialCapacity);
 }

Supply code of LinkedHashSet


/**

 * Constructs a brand new, empty linked hash set.  (This bundle non-public constructor
 * is barely used by LinkedHashSet.) The backing HashMap occasion is a 
 * LinkedHashMap with the required preliminary capability and the required load 
 * issue
 */
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
    map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}

Supply code of  TreeSet

public TreeSet() {
        this(new TreeMap<E,Object>());
}

Earlier
TreeSet
is internally carried out TreeMap however with introduction of NavigableMap in Java 1.6, its implementation has modified.

5. Iterator

Iterator
returned by all three Set implementations is fail-fast, which implies if you happen to
modify assortment as soon as iteration begins i.e. add or delete components with out
utilizing Iterator’s take away technique, it’ll throw
ConcurrentModificationException

Additionally, the Iterator of HashSet does not assure any order, whereas the Iterator
of LinkedHashSet allows you to iterate within the order components are added. You’ll be able to
additionally see
this article to be taught extra about various kinds of Iterator in Java.

6. Efficiency

Out of HashSet, LinkedHashSet, and TreeSet,  HashSet is the quickest for
widespread operations like add, search and take away, LinkedHashSet is an in depth
second, because it suffers a bit drop in efficiency as a result of overhead of
sustaining a doubly linked checklist when a component is inserted or deleted. 

TreeSet is way slower than these two as a result of it must carry out sorting
each time there’s a change in TreeSet. It means by default it is best to use
HashSet, till and until you really want
LinkedHashSet or
TreeSet

You can too test
this text
for extra variations between TreeSet and TreeMap in Java.

Abstract

Here’s a good desk to match the completely different implementations of the Set
interface e.g.
EnumSet,
TreeSet,
CopyOnWriteArraySet,
HashSet,
LinkedHashSet,
and
ConcurrentSkipListSet
on completely different parameters e.g. information construction, sorting, iterator and the way they
deal with null enter.

Difference between LinkedHashSet, TreeSet and HashSet in Java

That is all concerning the distinction between LinkedHashSet vs TreeSet vs HashSet in Java. You need to use
HashSet for normal objective Set requirement, the place it is advisable retailer solely distinctive
components with none sorting or order requirement, if it is advisable preserve the
order on which components are added into Set, aside from assure of distinctive
components, use
LinkedHashSet

If it is advisable hold your components in a selected sorting order use
TreeSet, you possibly can both hold components of their pure order or you possibly can customise
their sorting order by offering a Comparator e.g. protecting notes in rising
order of their worth.

Associated Java tutorials to be taught Assortment Framework in Java

Thanks for studying this text to date. When you like this Java Set tutorial and
distinction between HashSet, TreeSet, and LinkedHashSet in Java then please
share with your mates and colleagues. When you’ve got any questions or suggestions
then please drop a be aware. 

P. S. – If you’re new to Java and wish to grasp Java assortment
framework then you too can checkout this checklist of
greatest Java Assortment and Stream programs
to be taught Java Assortment Framework in depth. It embrace greatest Java collections
course from Udemy and Pluralsight. 
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments