Source of Bag.java


  1: import java.util.Collection;

  3: /**
  4:  * @param <T> the base type of this Bag
  5:  * @author Mark Young (A00000000)
  6:  */
  7: public interface Bag<T> extends Collection<T> {

  9:     /**
 10:      * Remove an item from this Bag. The item to remove is at the discretion of
 11:      * the implementation.
 12:      *
 13:      * @return an arbitrary item removed from this Bag
 14:      */
 15:     public T remove();

 17:     /**
 18:      * Get a count of how many times the given item appears in this Bag. Whether
 19:      * the count uses reference equality or object equality is implementation
 20:      * dependent.
 21:      *
 22:      * @param anItem the item to count
 23:      * @return how many times that item appears in this Bag
 24:      */
 25:     public int getFrequency(T anItem);
 26:     
 27:     /*
 28:      * Some default implementations for methods. I don't know why Collection
 29:      * doesn't give these itself!
 30:      */
 31:     
 32:     @Override
 33:     public default boolean addAll(Collection<? extends T> c) {
 34:         int oldSize = size();
 35:         for (var item : c) {
 36:             add(item);
 37:         }
 38:         return oldSize != size();
 39:     }
 40:     
 41:     @Override
 42:     public default void clear() {
 43:         while (!isEmpty()) {
 44:             remove();
 45:         }
 46:     }
 47:     
 48:     @Override
 49:     public default boolean containsAll(Collection<?> c) {
 50:         for (var obj : c) {
 51:             if (!contains((T)obj)) {
 52:                 return false;
 53:             }
 54:         }
 55:         return true;
 56:     }
 57:     
 58:     @Override
 59:     public default boolean isEmpty() {
 60:         return size() == 0;
 61:     }
 62:     
 63:     @Override
 64:     public default boolean removeAll(Collection<?> c) {
 65:         int oldSize = size();
 66:         for (var obj : c) {
 67:             remove((T)obj);
 68:         }
 69:         return oldSize != size();
 70:     }
 71:     
 72:     @Override
 73:     public default boolean retainAll(Collection<?> c) {
 74:         int oldSize = size();
 75:         for (Object obj : toArray()) {
 76:             if (!c.contains(obj)) {
 77:                 remove((T)obj);
 78:             }
 79:         }
 80:         return oldSize != size();
 81:     }
 82: }