package org.lateralgm.main;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.ListIterator;
public class WeakArrayList<E> extends ArrayList<WeakReference<E>>
{
private static final long serialVersionUID = 1L;
private final ReferenceQueue<E> queue = new ReferenceQueue<E>();
public WeakArrayList()
{
super();
}
@Override
public int size()
{
expungeStaleEntries();
return super.size();
}
@Override
public boolean isEmpty()
{
expungeStaleEntries();
return size() == 0;
}
@Override
public boolean contains(Object o)
{
expungeStaleEntries();
return super.contains(o);
}
@Override
public boolean containsAll(Collection<?> c)
{
expungeStaleEntries();
return super.containsAll(c);
}
@Override
public int indexOf(Object o)
{
expungeStaleEntries();
return super.indexOf(o);
}
@Override
public int lastIndexOf(Object o)
{
expungeStaleEntries();
return super.lastIndexOf(o);
}
@Override
public Iterator<WeakReference<E>> iterator()
{
expungeStaleEntries();
return super.iterator();
}
@Override
public ListIterator<WeakReference<E>> listIterator()
{
expungeStaleEntries();
return super.listIterator();
}
@Override
public void trimToSize()
{
expungeStaleEntries();
super.trimToSize();
}
@Override
public Object[] toArray()
{
expungeStaleEntries();
return super.toArray();
}
@Override
public <T>T[] toArray(T[] a)
{
expungeStaleEntries();
return super.toArray(a);
}
private void expungeStaleEntries()
{
Reference<? extends E> r;
while ((r = queue.poll()) != null)
remove(r);
}
}