001package org.syncany.util; 002 003import java.util.Collection; 004import java.util.TreeSet; 005 006/** 007 * A limited sorted set is a {@link TreeSet} with limited entries. 008 * Entries that exceed the maximum size of the set (<em>maxSize</em>) 009 * will be removed from the set. 010 * 011 * @see <a href="http://stackoverflow.com/questions/8382529/limited-sortedset">Original code on stackoverflow.com</a> 012 * @author Thomas ?, see http://stackoverflow.com/users/637853/thomas 013 */ 014@SuppressWarnings("unchecked") 015public class LimitedSortedSet<E> extends TreeSet<E> { 016 private static final long serialVersionUID = -4876601911765911284L; 017 private int maxSize; 018 019 public LimitedSortedSet(int maxSize) { 020 this.maxSize = maxSize; 021 } 022 023 @Override 024 public boolean addAll(Collection<? extends E> c) { 025 boolean added = super.addAll(c); 026 027 if (size() > maxSize) { 028 E firstToRemove = (E) toArray()[maxSize]; 029 removeAll(tailSet(firstToRemove)); 030 } 031 032 return added; 033 } 034 035 @Override 036 public boolean add(E o) { 037 boolean added = super.add(o); 038 039 if (size() > maxSize) { 040 E firstToRemove = (E) toArray()[maxSize]; 041 removeAll(tailSet(firstToRemove)); 042 } 043 044 return added; 045 } 046}