What is the Purpose of a LinkedHashMap in Java?

What is the Purpose of a LinkedHashMap in Java? Benefits, Usage, and Code Examples Explained

In Java, the LinkedHashMap class is part of the java.util package and plays a crucial role when it comes to maintaining the order of elements within a map. Unlike a standard HashMap, the LinkedHashMap not only stores key-value pairs but also maintains the order of insertion. This simple yet powerful data structure is a favorite among developers when it comes to implementing maps where order matters.

What is a LinkedHashMap in Java?

The LinkedHashMap is a type of Map that maintains the order in which elements are inserted. It is an implementation of the Map interface, and its key feature is that it preserves the insertion order, unlike the HashMap which does not guarantee any specific order of the entries.

LinkedHashMap vs HashMap: Key Differences

Before we dive deeper into the usage of LinkedHashMap, let’s compare it with HashMap, another commonly used Map implementation:

  • Order of elements: In a HashMap, the order of elements is not predictable, as it relies on the hash code of the keys. However, in a LinkedHashMap, elements are maintained in the order of insertion.
  • Performance: Both HashMap and LinkedHashMap provide constant-time performance for the basic operations like get(), put(), and remove(). However, LinkedHashMap has a slight overhead due to the maintenance of the order.
  • Use case: If you need to maintain the order of elements while iterating through the map, then LinkedHashMap is the better choice. On the other hand, HashMap is more suited for scenarios where order is not important.

How Does a LinkedHashMap Work?

Internally, a LinkedHashMap is implemented using a hash table and a linked list. The hash table allows quick lookups of keys, while the linked list keeps track of the order in which the keys were inserted. This combination of data structures ensures that operations like get(), put(), and remove() can be performed in constant time, while preserving the insertion order.

Creating and Using a LinkedHashMap

Let’s explore how to create and use a LinkedHashMap in Java. Below is an example of how to use this class:


import java.util.LinkedHashMap;
import java.util.Map;

public class LinkedHashMapExample {
    public static void main(String[] args) {
        // Creating a LinkedHashMap
        Map map = new LinkedHashMap<>();

        // Adding key-value pairs
        map.put("Apple", 1);
        map.put("Banana", 2);
        map.put("Cherry", 3);

        // Displaying the map
        System.out.println("LinkedHashMap: " + map);

        // Accessing values
        System.out.println("Value for Banana: " + map.get("Banana"));

        // Removing an element
        map.remove("Apple");
        System.out.println("After removing Apple: " + map);

        // Iterating over the map
        for (Map.Entry entry : map.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

        

Output:


LinkedHashMap: {Apple=1, Banana=2, Cherry=3}
Value for Banana: 2
After removing Apple: {Banana=2, Cherry=3}
Banana: 2
Cherry: 3

        

Features of LinkedHashMap

Some of the key features of the LinkedHashMap include:

  • Maintains Insertion Order: As mentioned earlier, LinkedHashMap maintains the order of the elements based on their insertion order.
  • Iteration Order: When iterating over a LinkedHashMap, the elements will be returned in the order they were added.
  • Efficient Search: Like HashMap, LinkedHashMap also provides constant-time complexity for the basic operations like get(), put(), and remove().
  • Customizable Access Order: You can create a LinkedHashMap with an option to maintain the order based on the access order rather than insertion order. This can be useful for implementing caches where the least recently accessed items are removed first.

LinkedHashMap with Access Order

If you want the elements to be iterated in the order of their access (rather than insertion), you can create a LinkedHashMap with the access order flag set to true. This is particularly useful when implementing a caching mechanism.


import java.util.LinkedHashMap;
import java.util.Map;

public class LinkedHashMapAccessOrderExample {
    public static void main(String[] args) {
        Map map = new LinkedHashMap<>(16, 0.75f, true);

        // Adding elements
        map.put("Apple", 1);
        map.put("Banana", 2);
        map.put("Cherry", 3);

        // Accessing values
        map.get("Apple");
        map.get("Banana");

        // Iterating over the map
        System.out.println("After accessing Apple and Banana:");
        for (Map.Entry entry : map.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

        

Output:


After accessing Apple and Banana:
Apple: 1
Banana: 2
Cherry: 3

        

Real-World Use Cases of LinkedHashMap

Here are some real-world scenarios where LinkedHashMap can be particularly useful:

  • Cache Implementation: In many caching algorithms, such as Least Recently Used (LRU) cache, LinkedHashMap can be used to maintain the order of access and evict the least recently used entries.
  • Storing Ordered Data: If you need to store data in the order it was inserted and iterate over it in that order, LinkedHashMap is a great choice.
  • Unique Entries with Insertion Order: When you need to maintain unique entries and still keep track of the order of insertion, such as in a list of products or items where order matters.

Conclusion

In conclusion, the LinkedHashMap class in Java is a valuable implementation of the Map interface that not only provides the performance benefits of HashMap but also maintains the order of insertion or access. This makes it an essential data structure when order matters in your application, such as in caching mechanisms or ordered collections.

By understanding the characteristics of LinkedHashMap and knowing when to use it, you can make informed decisions that will improve the performance and design of your Java applications.

Please follow and like us:

Leave a Comment