LinkedHashSet, TreeSet and HashSet are three of most popular implementation of Set interface in Java Collection Framework. Since they implement
Set interface, they follow it's contract for not allowing duplicates. All these implementation except,
TreeSet uses
equals() method to check for duplicates, on the other hand TreeSet use
compareTo() or
compare() method for comparing objects and can break
Set interface contract of unique element,
if equals method is not consistent with compareTo() or compare() method. In this Java Collection tutorial, we will see
difference between LinkedHashSet vs TreeSet vs HashSet on different points e.g. speed, performance, ordering, synchronization etc. Based upon these differences we can also decide
when to use LinkedHashSet vs TreeSet vs HashSet in Java. TL;DR, Use
HashSet for all general purpose usage i.e. where you need to store only unique elements without any ordering requirement. If you need to maintain order on which elements are added into Set then use
LinkedHashSet, it provides ordering with little impact on performance. Use
TreeSet when you absolutely nee to keep elements in specific sorted order e.g. keeping employee in increasing order of their age or salary. Remember,
TreeSet is significantly slower than
LinkedHashSet and
HashSet because of this sorting overhead.