removeEldestEntry在元素插入后总是被检查.例如,如果覆盖方法总是返回true,那么LinkedHashMap将永远是空的,因为在每次put或putAll插入后,最老的元素都将被删除,无论如何. JavaDoc显示了一个非常明智的例子,说明如何使用它:
protected boolean removeEldestEntry(Map.Entry eldest){
return size() > MAX_SIZE;
}
换一种方式,如果不重要,您可能只想删除一个条目:
protected boolean removeEldestEntry(Map.Entry eldest){
if(size() > MAX_ENTRIES){
if(isImportant(eldest)){
//Handle an important entry here, like reinserting it to the back of the list
this.remove(eldest.getKey());
this.put(eldest.getKey(), eldest.getValue());
//removeEldestEntry will be called again, now with the next entry
//so the size should not exceed the MAX_ENTRIES value
//WARNING: If every element is important, this will loop indefinetly!
} else {
return true; //Element is unimportant
}
return false; //Size not reached or eldest element was already handled otherwise
}