SortedListとかいうのがTLに見えたから
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.RandomAccess;
public class SortedList<E> extends ArrayList<E>
{
private Sorter<E> sorter;
public SortedList(Sorter<E> sorter, int initialCapacity)
{
super(initialCapacity);
this.sorter = sorter;
}
public SortedList(Sorter<E> sorter)
{
super();
this.sorter = sorter;
}
public SortedList(Sorter<E> sorter, Collection<? extends E> c)
{
super(c);
this.sorter = sorter;
}
@Override
public boolean add(E e)
{
boolean b = super.add(e);
if (b)
{
sort();
}
return b;
}
@Override
public void add(int index, E element)
{
super.add(index, element);
sort();
}
@Override
public boolean addAll(Collection<? extends E> c)
{
boolean b = super.addAll(c);
if (b)
{
sort();
}
return b;
}
@Override
public boolean addAll(int index, Collection<? extends E> c)
{
boolean b = super.addAll(index, c);
if (b)
{
sort();
}
return b;
}
@Override
public E remove(int index)
{
E e = super.remove(index);
sort();
return e;
}
@Override
public boolean remove(Object o)
{
boolean b = super.remove(o);
if (b)
{
sort();
}
return b;
}
@Override
public E set(int index, E element)
{
E e = super.set(index, element);
sort();
return e;
}
public synchronized List<E> sort()
{
return sorter.sort(this);
}
public static abstract class Sorter<E>
{
public abstract List sort(List<E> list);
}
}