総称クラスであるコレクションクラスを継承するサンプルとして。


//
// extends Generics Collection Class
//
 
/**
 * 要素数に上限のある LinkedhashMap です。
 */
public class LimitedLinkedHashMap<K,V> extends LinkedHashMap<K,V> {
 
  // Eclipse には serialVersionUID 自動生成機能がある。
  // 警告アイコンを右クリックして Quick Fix を選択すると、
  // add generated serial version ID という機能が出てくる。
  // 酢ばらしぃ。
  private static final long serialVersionUID = -8386865314183274352L;
 
  private final int maxSize;
 
  /**
   * 
   * @param maxSize 要素の数の上限
   */
  public LimitedLinkedHashMap(int maxSize){
    super(maxSize + 1);
    this.maxSize = maxSize;
  }
 
  // removeEldestEntry メソッドで true を返すようにオーバーライドすると、
  // 使われてなさそうな要素(getもputも最近されていない要素)が削除される。
  protected boolean removeEldestEntry(Map.Entry eldest) {
    return size() > maxSize;
  }
}

コメント

LinkedHashMap のコンストラクタを呼び出すところは、

super(maxSize + 1, 0.75f, true);

とすれば、「予測可能な繰り返し順序」がアクセス順になる。デフォルトでは挿入順。

tags: zlashdot Java Java

Posted by NI-Lab. (@nilab)