HaniiPuppy

SortedQueue

Sep 30th, 2014
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.14 KB | None | 0 0
  1. package puppy.hanii.library.collections;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Collection;
  6. import java.util.Iterator;
  7. import java.util.List;
  8. import java.util.NoSuchElementException;
  9. import java.util.Queue;
  10. import org.apache.commons.lang.NullArgumentException;
  11. import puppy.hanii.library.handling.lists.SortedListHandler;
  12. import puppy.hanii.library.misc.Lambda;
  13.  
  14. public class SortedQueue<T> implements Queue<T>
  15. {
  16.     //<editor-fold defaultstate="collapsed" desc="Constructors">
  17.     public SortedQueue(Lambda<T, Comparable> keyGetter)
  18.     {
  19.         members = new ArrayList<T>();
  20.         this.keyGetter = keyGetter;
  21.         membersHandler = new SortedListHandler<T>(keyGetter);
  22.     }
  23.  
  24.     public SortedQueue(Lambda<T, Comparable> keyGetter, T... members)
  25.     { this(keyGetter, Arrays.asList(members)); }
  26.  
  27.     public SortedQueue(Lambda<T, Comparable> keyGetter, Collection<? extends T> members)
  28.     {
  29.         this.members = new ArrayList<T>(members);
  30.         this.keyGetter = keyGetter;
  31.         membersHandler = new SortedListHandler<T>(keyGetter);
  32.     }
  33.  
  34.     public SortedQueue(T[] members, Lambda<T, Comparable> keyGetter)
  35.     { this(keyGetter, Arrays.asList(members)); }
  36.  
  37.     public SortedQueue(Collection<? extends T> members, Lambda<T, Comparable> keyGetter)
  38.     { this(keyGetter, members); }
  39.     //</editor-fold>
  40.  
  41.     //<editor-fold defaultstate="collapsed" desc="Fields">
  42.     final List<T> members;
  43.     final SortedListHandler<T> membersHandler;
  44.     final Lambda<T, Comparable> keyGetter;
  45.     //</editor-fold>
  46.  
  47.     //<editor-fold defaultstate="collapsed" desc="Methods">
  48.     //<editor-fold defaultstate="collapsed" desc="Adders">
  49.     @Override
  50.     public boolean add(T e)
  51.     {
  52.         if(e == null)
  53.             throw new NullArgumentException("e");
  54.  
  55.         synchronized(members)
  56.         { return membersHandler.insertEvenIfAlreadyPresent(members, e) >= 0; }
  57.     }
  58.  
  59.     @Override
  60.     public boolean addAll(Collection<? extends T> clctn)
  61.     {
  62.         if(clctn == null)
  63.             throw new NullArgumentException("clctn");
  64.  
  65.         for(T i : clctn)
  66.             if(i == null)
  67.                 throw new NullArgumentException("Member of clctn");
  68.  
  69.         synchronized(members)
  70.         {
  71.             if(members.addAll(clctn))
  72.             {
  73.                 List<T> temp = membersHandler.quickSort(members);
  74.                 members.clear();
  75.                 members.addAll(temp);
  76.                 return true;
  77.             }
  78.  
  79.             return false;
  80.         }
  81.     }
  82.  
  83.     @Override
  84.     public boolean offer(T e)
  85.     { return add(e); }
  86.     //</editor-fold>
  87.  
  88.     //<editor-fold defaultstate="collapsed" desc="Getters/Removers">
  89.     public T get(boolean remove)
  90.     {
  91.         synchronized(members)
  92.         {
  93.             if(members.size() <= 0)
  94.                 throw new NoSuchElementException();
  95.  
  96.             if(remove)
  97.                 return members.remove(0);
  98.             else
  99.                 return members.get(0);
  100.         }
  101.     }
  102.  
  103.     @Override
  104.     public T remove()
  105.     { return get(true); }
  106.  
  107.     @Override
  108.     public boolean remove(Object o)
  109.     {
  110.         if(o == null)
  111.             throw new NullArgumentException("o");
  112.  
  113.         synchronized(members)
  114.         { return members.remove(o); }
  115.     }
  116.  
  117.     @Override
  118.     public T poll()
  119.     {
  120.         try
  121.         { return get(true); }
  122.         catch(NoSuchElementException e)
  123.         { return null; }
  124.     }
  125.  
  126.     @Override
  127.     public T element()
  128.     { return get(false); }
  129.  
  130.     @Override
  131.     public T peek()
  132.     {
  133.         try
  134.         { return get(false); }
  135.         catch(NoSuchElementException e)
  136.         { return null; }
  137.     }
  138.  
  139.     @Override
  140.     public boolean removeAll(Collection<?> clctn)
  141.     {
  142.         synchronized(members)
  143.         { return members.removeAll(clctn); }
  144.     }
  145.  
  146.     @Override
  147.     public boolean retainAll(Collection<?> clctn)
  148.     {
  149.         synchronized(members)
  150.         { return members.retainAll(clctn); }
  151.     }
  152.  
  153.     @Override
  154.     public void clear()
  155.     {
  156.         synchronized(members)
  157.         { members.clear(); }
  158.     }
  159.     //</editor-fold>
  160.  
  161.     //<editor-fold defaultstate="collapsed" desc="Accessors">
  162.     @Override
  163.     public int size()
  164.     {
  165.         synchronized(members)
  166.         { return members.size(); }
  167.     }
  168.  
  169.     @Override
  170.     public boolean isEmpty()
  171.     {
  172.         synchronized(members)
  173.         { return members.isEmpty(); }
  174.     }
  175.  
  176.     @Override
  177.     public boolean contains(Object o)
  178.     {
  179.         synchronized(members)
  180.         { return members.contains(o); }
  181.     }
  182.  
  183.     @Override
  184.     public Iterator<T> iterator()
  185.     {
  186.         synchronized(members)
  187.         { return members.iterator(); }
  188.     }
  189.  
  190.     @Override
  191.     public Object[] toArray()
  192.     {
  193.         synchronized(members)
  194.         { return members.toArray(); }
  195.     }
  196.  
  197.     @Override
  198.     public <T> T[] toArray(T[] ts)
  199.     {
  200.         synchronized(members)
  201.         { return members.toArray(ts); }
  202.     }
  203.  
  204.     @Override
  205.     public boolean containsAll(Collection<?> clctn)
  206.     {
  207.         synchronized(members)
  208.         { return members.containsAll(clctn); }
  209.     }
  210.     //</editor-fold>
  211.     //</editor-fold>
  212. }
Advertisement
Add Comment
Please, Sign In to add comment