I need a HashMap
or simpy a Map
with a fixed number of elements (n) working like a FIFO queue.
So until the element number is <= n new elements are simply put in the map.
For element number > n the first inserted element is removed and the newest is put in the map.
Is there something similar in Java, or do I have to implement it?
You can do this with LinkedHashMap
as follows:
new LinkedHashMap<K, V>(n) {
@Override protected boolean removeEldestEntry(Entry<K, V> entry) {
return size() > n;
}
};
As I am on the side, where Java verbosity is its best feature... Below works for me:
public class FifoMap extends LinkedHashMap<String, String> {
int max;
/**
*
*/
private static final long serialVersionUID = 1L;
public FifoMap (int max){
super(max + 1);
this.max = max;
}
@Override
public String put (String key, String value) {
String forReturn = super.put(key, value);
if (super.size() > max){
removeEldest();
}
return forReturn;
}
private void removeEldest() {
Iterator <String> iterator = this.keySet().iterator();
if (iterator.hasNext()){
this.remove(iterator.next());
}
}
}
It also works on Google App Engine that seems like has problem with Entry class.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With