我知道这个问题的答案很容易从互联网上获得。我需要知道如果不选择removeEldestEntry
会发生什么。下面是我的代码:
package collection;
import java.util.*;
public class MyLinkedHashMap {
private static final int MAX_ENTRIES = 2;
public static void main(String[] args) {
LinkedHashMap lhm = new LinkedHashMap(MAX_ENTRIES, 0.75F, false) {
protected boolean removeEldestEntry(Map.Entry eldest) {
return false;
}
};
lhm.put(0, "H");
lhm.put(1, "E");
lhm.put(2, "L");
lhm.put(3, "L");
lhm.put(4, "O");
System.out.println("" + lhm);
}
}
即使我不允许
removeEldestEntry
,我的代码也可以正常工作。那么,内部发生了什么?
最佳答案
插入元素后,始终会检查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
}