SoftHashMap.java :  » J2EE » hgcommons » biz » hammurapi » cache » Java Open Source

Java Open Source » J2EE » hgcommons 
hgcommons » biz » hammurapi » cache » SoftHashMap.java
/*
 * hgcommons 7
 * Hammurapi Group Common Library 
 * Copyright (C) 2003  Hammurapi Group
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * URL: http://www.hammurapi.biz/hammurapi-biz/ef/xmenu/hammurapi-group/products/products/hgcommons/index.html
 * e-Mail: support@hammurapi.biz
 */
package biz.hammurapi.cache;

import java.lang.ref.Reference;
import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Map;

/**
 * Map with soft-referenced values.
 * @author Pavel Vlasov
 * @revision $Revision$
 */
public class SoftHashMap extends HashMap {
  private Object nullMarker=new Object();

  /**
   * 
   */
  private static final long serialVersionUID = 4095082501213777588L;

  public SoftHashMap() {
    super();
  }

  public SoftHashMap(int initialCapacity) {
    super(initialCapacity);
  }

  public SoftHashMap(int initialCapacity, float loadFactor) {
    super(initialCapacity, loadFactor);
  }

  public SoftHashMap(Map m) {
    super(m);
  }
  
  public Object put(Object key, Object value) {
    return super.put(key, new SoftReference(value==null ? nullMarker : value));
  }
  
  public Object get(Object key) {
    Reference ref = (Reference) super.get(key);
    if (ref==null) {
      return null;
    }
    
    Object value = ref.get();
    if (value==null) {
      remove(key);
    }
    return value==nullMarker ? null : value;
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.