package freenet.support;
import java.util.AbstractSet;
import java.util.Collection;
import java.util.Iterator;
import java.util.WeakHashMap;
public class WeakHashSet<E> extends AbstractSet<E> {
private final WeakHashMap<E, Object> map;
private final static Object placeholder = new Object();
public WeakHashSet() {
map = new WeakHashMap<E, Object>();
}
@Override
public boolean add(E key) {
return map.put(key, placeholder) == null;
}
@Override
public void clear() {
map.clear();
}
@Override
public boolean contains(Object key) {
return map.containsKey(key);
}
@Override
public boolean containsAll(Collection<?> arg0) {
return map.keySet().containsAll(arg0);
}
@Override
public boolean isEmpty() {
return map.isEmpty();
}
@Override
public Iterator<E> iterator() {
return map.keySet().iterator();
}
@Override
public boolean remove(Object key) {
return map.remove(key) != null;
}
@Override
public int size() {
return map.size();
}
@Override
public Object[] toArray() {
return map.keySet().toArray();
}
@Override
public <T> T[] toArray(T[] arg0) {
return map.keySet().toArray(arg0);
}
}