LinkedHashSet in Java

Filed Under: Java
LinkedHashSet Java

1. LinkedHashSet Class

  • LinkedHashSet class is the hash table and linked list implementation of the Set interface, with predictable iteration order.
  • It maintains a doubly linked list to maintain the order of elements.
  • LinkedHashSet iterator returns elements in the order they were inserted, so the elements are iterated in the insertion-order.
  • The iteration order is not affected if an element is re-inserted into the LinkedHashSet.
  • It’s useful when we want a Set that maintains insertion-order for iteration, but doesn’t want to add the extra overhead associated with the TreeSet.

2. LinkedHashSet Constructors

There are four constructors to create LinkedHashSet instance.

LinkedHashSet Constructors

LinkedHashSet Constructors

  1. LinkedHashSet(): creates an empty linked hash set with the default initial capacity (16) and load factor (0.75).
  2. LinkedHashSet(int initialCapacity): creates a new, empty linked hash set with the specified initial capacity and the default load factor (0.75). It throws the IllegalArgumentException if the initial capacity is less than 0.
  3. LinkedHashSet(int initialCapacity, float loadFactor): creates an empty LinkedHashSet with the given initial capacity and load factor. It throws IllegalArgumentException if the initial capacity is less than zero, or if the load factor is nonpositive.
  4. LinkedHashSet(Collection<? extends E> c): creates a new linked hash set with the same elements as the specified collection. It throws NullPointerException if the given collection is null.

3. LinkedHashSet Iteration Order Example

A simple example to show that LinkedHashSet iterator returns elements in the order of insertion. The same is not true for the HashSet.


HashSet<String> hs = new HashSet<>();
hs.add("a");
hs.add("i");
hs.add("u");
hs.add("e");
hs.add("o");

System.out.println(hs);
hs.forEach(System.out::println);

LinkedHashSet<String> lhs = new LinkedHashSet<>();
lhs.add("a");
lhs.add("i");
lhs.add("u");
lhs.add("e");
lhs.add("o");

System.out.println(lhs);
lhs.forEach(System.out::println);

Output:


[a, u, e, i, o]
a
u
e
i
o
[a, i, u, e, o]
a
i
u
e
o

4. LinkedHashSet vs HashSet

  • LinkedHashSet iterator return elements in the insertion order. HashSet iterator doesn’t maintain any order.
  • LinkedHashSet performance is slightly below that of HashSet, due to the added expense of maintaining the linked list, with one exception: Iteration over a LinkedHashSet requires time proportional to the size of the set, regardless of its capacity. Iteration over a HashSet is likely to be more expensive, requiring time proportional to its capacity.

5. LinkedHashSet vs TreeSet

If you are looking for a Set implementation where the elements are iterated in the order of insertion, use LinkedHashSet. It saves the extra performance cost associated with the TreeSet.

Reference: LinkedHashSet API Docs

Leave a Reply

Your email address will not be published. Required fields are marked *

close
Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages