LinkedHashMapのremoveEldestEntryメソッド


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; 
    } 
};