LimitedSortedSet.java
package org.syncany.util;
import java.util.Collection;
import java.util.TreeSet;
/**
* A limited sorted set is a {@link TreeSet} with limited entries.
* Entries that exceed the maximum size of the set (<em>maxSize</em>)
* will be removed from the set.
*
* @see <a href="http://stackoverflow.com/questions/8382529/limited-sortedset">Original code on stackoverflow.com</a>
* @author Thomas ?, see http://stackoverflow.com/users/637853/thomas
*/
@SuppressWarnings("unchecked")
public class LimitedSortedSet<E> extends TreeSet<E> {
private static final long serialVersionUID = -4876601911765911284L;
private int maxSize;
public LimitedSortedSet(int maxSize) {
this.maxSize = maxSize;
}
@Override
public boolean addAll(Collection<? extends E> c) {
boolean added = super.addAll(c);
if (size() > maxSize) {
E firstToRemove = (E) toArray()[maxSize];
removeAll(tailSet(firstToRemove));
}
return added;
}
@Override
public boolean add(E o) {
boolean added = super.add(o);
if (size() > maxSize) {
E firstToRemove = (E) toArray()[maxSize];
removeAll(tailSet(firstToRemove));
}
return added;
}
}