Difference between TreeSet, LinkedHashSet, and HashSet in Java with Example

Last updated May 12, 2022

The Java Collection Framework provides three commonly used implementations of Set, including LinkedHashSet, TreeSet, and HashSet. Due to the fact that they implement a Set interface, they do not allow duplicates. Consequently, you can't have two items of the same type (duplicates). 

The Key Difference between TreeSet, LinkedHashSet, and HashSet in Java

We are going to look at the differences between the three based on the following factors:

a) Performance speed

Performance speed is one of the primary differences between the three. The HashSet is the fastest of the three, followed by the LinkedHashSet, and finally, the TreeSet is the slowest. Treesets have the lowest performance speed because they perform sorting on every insertion.

b) Maintaining order

TreeSets and LinkedHashSet maintain the order of elements' insertion, while HashSet does not.

c) Implementation

By default, HashSet uses a HashMap instance, LinkedHashSet uses LinkedList and HashSet, and TreeSet uses NavigableMap, which TreeMap backs up.

d) Null values

Both the  HashMap and the LinkedHashMaps allow one null key, while on the other side, the Treemap does not allow the null keys.

Example

Here, we will create an example that compares the insertion order and running time of the three

import java.util.Arrays;

import java.util.HashSet;

import java.util.LinkedHashSet;

import java.util.Set;

import java.util.TreeSet;

public class TreeSet_HashSet_LinkedHashSet {

            public static void main(String[] args) {

        HashSet HashSetLanguages = new HashSet();

        LinkedHashSet LinkedHashSetLanguages = new LinkedHashSet();

        TreeSet TreeSetLanguages = new TreeSet();

    

        for(String PL: Arrays.asList("Java", "Python", "C++")){

            HashSetLanguages.add(PL);

            LinkedHashSetLanguages.add(PL);

            TreeSetLanguages.add(PL);

        }

        System.out.println("HashSet Elements insertion order :" + HashSetLanguages);

        System.err.println("LinkedHashSet Elements insertion order :" + LinkedHashSetLanguages);

        System.out.println("TreeSet Elements insertion order:" + TreeSetLanguages);

        Set numbers = new HashSet();

        long startTime = System.nanoTime();

        for(int i =0; i<10000000; i++){

            numbers.add(i);

        }

        long endTime = System.nanoTime();

        System.out.println("HashSet Performance time : "

                            + (endTime - startTime));

    

        numbers = new LinkedHashSet();

        startTime = System.nanoTime();

        for(int i =0; i<10000000; i++){

            numbers.add(i);

        }

        endTime = System.nanoTime();

        System.out.println(" LinkedHashSet Performance time : "

                            + (endTime - startTime));

        numbers = new TreeSet();

        startTime = System.nanoTime();

        for(int i =0; i<10000000; i++){

            numbers.add(i);

        }

        endTime = System.nanoTime();

        System.out.println(" TreeSet Performance time : "

                            + (endTime - startTime));

 

            }

}

 

Output:

HashSet Elements insertion order :[Java, C++, Python]

LinkedHashSet Elements insertion order :[Java, Python, C++]

TreeSet Elements insertion order:[C++, Java, Python]

HashSet Performance time : 1213617900

 LinkedHashSet Performance time : 1932495200

 TreeSet Performance time : 2738249400

 

Differences between TreeSet, LinkedHashSet and HashSet

Article Contributed By :
https://www.rrtutors.com/site_assets/profile/assets/img/avataaars.svg

128 Views