Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 17th, 2012  |  syntax: None  |  size: 2.16 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Limited SortedSet
  2. SortedSet<Integer> t1 = new LimitedSet<Integer>(3);
  3. t1.add(5);
  4. t1.add(3);
  5. t1.add(1);
  6. // [1,3,5]
  7. t1.add(2);
  8. // [1,2,3]
  9. t1.add(9);
  10. // [1,2,3]
  11. t1.add(0);
  12. // [0,1,2]
  13.        
  14. @Test
  15. public void testLimitedSortedSet() {
  16. final LimitedSortedSet<Integer> t1 = new LimitedSortedSet<Integer>(3);
  17. t1.add(5);
  18. t1.add(3);
  19. t1.add(1);
  20. System.out.println(t1);
  21. // [1,3,5]
  22. t1.add(2);
  23. System.out.println(t1);
  24. // [1,2,3]
  25. t1.add(9);
  26. System.out.println(t1);
  27. // [1,2,3]
  28. t1.add(0);
  29. System.out.println(t1);
  30. // [0,1,2]
  31. Assert.assertTrue(3 == t1.size());
  32. Assert.assertEquals(Integer.valueOf(0), t1.first());
  33. }
  34.        
  35. t1.add(9);
  36. // [1,2,3]
  37.        
  38. class LimitedSortedSet<E> extends TreeSet<E> {
  39.  
  40.   private int maxSize;
  41.  
  42.   LimitedSortedSet( int maxSize ) {
  43.     this.maxSize = maxSize;
  44.   }
  45.  
  46.   @Override
  47.   public boolean addAll( Collection<? extends E> c ) {
  48.     boolean added = super.addAll( c );        
  49.     if( size() > maxSize ) {
  50.       E firstToRemove = (E)toArray( )[maxSize];
  51.       removeAll( tailSet( firstToRemove ) );
  52.     }  
  53.     return added;
  54.   }
  55.  
  56.   @Override
  57.   public boolean add( E o ) {    
  58.     boolean added =  super.add( o );
  59.     if( size() > maxSize ) {
  60.       E firstToRemove = (E)toArray( )[maxSize];
  61.       removeAll( tailSet( firstToRemove ) );
  62.     }
  63.     return added;
  64.   }
  65. }
  66.        
  67. public class LimitedSet implements SortedSet {
  68.  
  69.     private TreeSet treeSet = new TreeSet();
  70.  
  71.     public boolean add(E e) {
  72.         boolean result = treeSet.add(e);
  73.         if(treeSet.size() >= expectedSize) {
  74.             // remove the one you like ;)
  75.         }
  76.         return result;
  77.     }
  78.  
  79.     // all other methods delegate to the "treeSet"
  80.  
  81. }
  82.        
  83. public final class SortedSets {
  84.  
  85.     public <T> SortedSet<T> maximumSize(
  86.         final SortedSet<T> original, final int maximumSize){
  87.  
  88.         return new ForwardingSortedSet<T>() {
  89.  
  90.             @Override
  91.             protected SortedSet<T> delegate() {
  92.                 return original;
  93.             }
  94.  
  95.             @Override
  96.             public boolean add(final T e) {
  97.                 if(original.size()<maximumSize){
  98.                     return original.add(e);
  99.                 }else return false;
  100.             }
  101.  
  102.             // implement other methods accordingly
  103.         };
  104.     }
  105.  
  106. }