Is there a fixed sized queue which removes excessive elements?
Solution 1:
Actually the LinkedHashMap does exactly what you want. You need to override the removeEldestEntry
method.
Example for a queue with max 10 elements:
queue = new LinkedHashMap<Integer, String>()
{
@Override
protected boolean removeEldestEntry(Map.Entry<Integer, String> eldest)
{
return this.size() > 10;
}
};
If the "removeEldestEntry" returns true, the eldest entry is removed from the map.
Solution 2:
Yes, Two
From my own duplicate question with this correct answer, I learned of two:
-
EvictingQueue
in Google Guava -
CircularFifoQueue
in Apache Commons
I made productive use of the Guava EvictingQueue
, worked well.
To instantiate an EvictingQueue
call the static factory method create
and specify your maximum size.
EvictingQueue< Person > people = com.google.common.collect.EvictingQueue.create( 100 ) ; // Set maximum size to 100.