Java: Hashset Vs TreeSet - when should I use over the other? [duplicate]
Solution 1:
HashSet is Implemented using a hash table. Elements are not ordered. The add, remove,
and contains methods have constant time complexity O(1).
TreeSet is implemented using a tree structure(red-black tree in algorithm book). The elements in a set are sorted, but the add, remove, and contains methods has time complexity O(log (n)). It offers several methods to deal with the ordered set like first(), last(), headSet(), tailSet()
, etc.
1) First major difference between HashSet
and TreeSet
is performance. HashSet
is faster than TreeSet
and should be preferred choice if sorting of element is not required.
2) Second difference between HashSet
and TreeSet
is that HashSet
allows null object but TreeSet
doesn't allow null Object and throw NullPointerException
, Why, because TreeSet
uses compareTo()
method to compare keys and compareTo()
will throw java.lang.NullPointerException
.
3) Another significant difference between HashSet
and TreeSet
is that , HashSet
is backed by HashMap
while TreeSet
is backed by NavigableMap in Java.
4) One more difference between HashSet
and TreeSet
which is worth remembering is that HashSet uses equals()
method to compare two object in Set and for detecting duplicates while TreeSet
uses compareTo()
method for same purpose. if equals()
and compareTo()
are not consistent, i.e. for two equal object equals should return true while compareTo()
should return zero, than it will break contract of Set interface and will allow duplicates in Set implementations like TreeSet
5) Now most important difference between HashSet
and TreeSet
is ordering. HashSet
doesn't guaranteed any order while TreeSet
maintains objects in Sorted order defined by either Comparable
or Comparator
method in Java.
6) TreeSet
does not allow to insert Heterogeneous
objects. It will throw classCastException
at Runtime
if trying to add hetrogeneous objects, whereas HashSet
allows hetrogeneous objects.