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