LinkedHashMapのremoveEldestEntryメソッド
1910 ワード
LinkedHashMapにはremoveEldestEntry(Map.Entry eldest)メソッドがあり、このメソッドを上書きすることで、一定の条件を加え、条件を満たしてtrueを返します.putが新しい値メソッドに入ってtrueを返すと、mapの最も古いキーと値が除去されます.
import java.util.LinkedHashMap;
import java.util.Map;
public class LinkedHashMapTest { public static void main(String[] args) {
Map map = new FixedSizeLinkedHashMap();
System.out.println(map.size());
for(int i = 0; i < 50; i++) {
map.put(i, true);
System.out.println(map.size());
System.out.println(map);
}
}
}
class FixedSizeLinkedHashMap extends LinkedHashMap{
private static final long serialVersionUID = 6918023506928428613L;
private static int MAX_ENTRIES = 10; /**
*
* [url=home.php?mod=space&uid=7300]@return[/url] int
*/
public static int getMAX_ENTRIES() {
return MAX_ENTRIES;
}
/**
*
* @param int max_entries
*/
public static void setMAX_ENTRIES(int max_entries) {
MAX_ENTRIES = max_entries;
}
/**
* Map , true,
* @param Map.Entry eldest
* @return int
*/
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > MAX_ENTRIES;
}
}
private static final HashMap<String, Bitmap> sHardBitmapCache = new LinkedHashMap<String, Bitmap>(
HARD_CACHE_CAPACITY / 2, 0.75f, true)
{
private static final long serialVersionUID = -57738079457331894L;
@Override
protected boolean removeEldestEntry(
LinkedHashMap.Entry<String, Bitmap> eldest)
{
if (size() > HARD_CACHE_CAPACITY)
{
// ,
sSoftBitmapCache.put(eldest.getKey(),
new SoftReference<Bitmap>(eldest.getValue()));
return true;
}
else
return false;
}
};