LRU and FIFO implementations using LinkedHashMap

Not many knows, but the LinkedHashMap class allows you to implement both an LRU and FIFO queues almost without coding!
Here's how it's done:
 
Instantiating LinkedHashMap with the 3rd parameter passed as true in this c'tor:
public LinkedHashMap(int initialCapacity,
                     float loadFactor,
                     boolean accessOrder)

causes the map to become an LRU map. That's because the map is ordered by access-order.
But passing the 3rd parameter as false makes it a FIFO, because the map is ordered by insertion order.
So if you want to use it as an FIFO, do the following:
HashMap  map = new LinkedHashMap(0, 0.75F, false)

And if you want to use it as a LRU, use the following class that extends the LinkedHashMap class and overrides its removeEldestEntry method:
 
private class LRUMap<K, V> extends LinkedHashMap<K, V>
{
      private int maxCapacity;

      public LRUMap(int maxCapacity)
      {
            super(0, 0.75F, true);
            this.maxCapacity = maxCapacity;
      }

      @Override
      protected boolean removeEldestEntry(Map.Entry<K, V> eldest)
      {
            return size() >= this.maxCapacity;
      }
}


Note that in the c'tor of the LRU class, a bollean true flag is passed, unlike in the FIFO example, where false is passed.

Thank you for your interest!

We will contact you as soon as possible.

Want to Know More?

Oops, something went wrong
Please try again or contact us by email at info@tikalk.com
Thank you for your interest!

We will contact you as soon as possible.

Let's talk

Oops, something went wrong
Please try again or contact us by email at info@tikalk.com