Class AbstractMapBag<E>

  • Type Parameters:
    E - the type of elements in this bag
    All Implemented Interfaces:
    java.lang.Iterable<E>, java.util.Collection<E>, Bag<E>
    Direct Known Subclasses:
    HashBag, TreeBag

    public abstract class AbstractMapBag<E>
    extends java.lang.Object
    implements Bag<E>
    Abstract implementation of the Bag interface to simplify the creation of subclass implementations.

    Subclasses specify a Map implementation to use as the internal storage. The map will be used to map bag elements to a number; the number represents the number of occurrences of that element in the bag.

    Since:
    3.0 (previously DefaultMapBag v2.0)
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean add​(E object)
      Adds a new element to the bag, incrementing its count in the underlying map.
      boolean add​(E object, int nCopies)
      Adds a new element to the bag, incrementing its count in the map.
      boolean addAll​(java.util.Collection<? extends E> coll)
      Invokes add(Object) for each element in the given collection.
      void clear()
      Clears the bag by clearing the underlying map.
      boolean contains​(java.lang.Object object)
      Determines if the bag contains the given element by checking if the underlying map contains the element as a key.
      boolean containsAll​(java.util.Collection<?> coll)
      Determines if the bag contains the given elements.
      boolean equals​(java.lang.Object object)
      Compares this Bag to another.
      int getCount​(java.lang.Object object)
      Returns the number of occurrence of the given element in this bag by looking up its count in the underlying map.
      int hashCode()
      Gets a hash code for the Bag compatible with the definition of equals.
      boolean isEmpty()
      Returns true if the underlying map is empty.
      java.util.Iterator<E> iterator()
      Gets an iterator over the bag elements.
      boolean remove​(java.lang.Object object)
      Removes all copies of the specified object from the bag.
      boolean remove​(java.lang.Object object, int nCopies)
      Removes a specified number of copies of an object from the bag.
      boolean removeAll​(java.util.Collection<?> coll)
      Removes objects from the bag according to their count in the specified collection.
      boolean retainAll​(java.util.Collection<?> coll)
      Remove any members of the bag that are not in the given bag, respecting cardinality.
      int size()
      Returns the number of elements in this bag.
      java.lang.Object[] toArray()
      Returns an array of all of this bag's elements.
      <T> T[] toArray​(T[] array)
      Returns an array of all of this bag's elements.
      java.lang.String toString()
      Implement a toString() method suitable for debugging.
      java.util.Set<E> uniqueSet()
      Returns an unmodifiable view of the underlying map's key set.
      • Methods inherited from class java.lang.Object

        getClass, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.util.Collection

        parallelStream, removeIf, spliterator, stream, toArray
      • Methods inherited from interface java.lang.Iterable

        forEach
    • Method Detail

      • size

        public int size()
        Returns the number of elements in this bag.
        Specified by:
        size in interface Bag<E>
        Specified by:
        size in interface java.util.Collection<E>
        Returns:
        current size of the bag
      • isEmpty

        public boolean isEmpty()
        Returns true if the underlying map is empty.
        Specified by:
        isEmpty in interface java.util.Collection<E>
        Returns:
        true if bag is empty
      • getCount

        public int getCount​(java.lang.Object object)
        Returns the number of occurrence of the given element in this bag by looking up its count in the underlying map.
        Specified by:
        getCount in interface Bag<E>
        Parameters:
        object - the object to search for
        Returns:
        the number of occurrences of the object, zero if not found
      • contains

        public boolean contains​(java.lang.Object object)
        Determines if the bag contains the given element by checking if the underlying map contains the element as a key.
        Specified by:
        contains in interface java.util.Collection<E>
        Parameters:
        object - the object to search for
        Returns:
        true if the bag contains the given element
      • containsAll

        public boolean containsAll​(java.util.Collection<?> coll)
        Determines if the bag contains the given elements.
        Specified by:
        containsAll in interface Bag<E>
        Specified by:
        containsAll in interface java.util.Collection<E>
        Parameters:
        coll - the collection to check against
        Returns:
        true if the Bag contains all the collection
      • iterator

        public java.util.Iterator<E> iterator()
        Gets an iterator over the bag elements. Elements present in the Bag more than once will be returned repeatedly.
        Specified by:
        iterator in interface Bag<E>
        Specified by:
        iterator in interface java.util.Collection<E>
        Specified by:
        iterator in interface java.lang.Iterable<E>
        Returns:
        the iterator
      • add

        public boolean add​(E object)
        Adds a new element to the bag, incrementing its count in the underlying map.
        Specified by:
        add in interface Bag<E>
        Specified by:
        add in interface java.util.Collection<E>
        Parameters:
        object - the object to add
        Returns:
        true if the object was not already in the uniqueSet
      • add

        public boolean add​(E object,
                           int nCopies)
        Adds a new element to the bag, incrementing its count in the map.
        Specified by:
        add in interface Bag<E>
        Parameters:
        object - the object to search for
        nCopies - the number of copies to add
        Returns:
        true if the object was not already in the uniqueSet
      • addAll

        public boolean addAll​(java.util.Collection<? extends E> coll)
        Invokes add(Object) for each element in the given collection.
        Specified by:
        addAll in interface java.util.Collection<E>
        Parameters:
        coll - the collection to add
        Returns:
        true if this call changed the bag
      • clear

        public void clear()
        Clears the bag by clearing the underlying map.
        Specified by:
        clear in interface java.util.Collection<E>
      • remove

        public boolean remove​(java.lang.Object object)
        Removes all copies of the specified object from the bag.
        Specified by:
        remove in interface Bag<E>
        Specified by:
        remove in interface java.util.Collection<E>
        Parameters:
        object - the object to remove
        Returns:
        true if the bag changed
      • remove

        public boolean remove​(java.lang.Object object,
                              int nCopies)
        Removes a specified number of copies of an object from the bag.
        Specified by:
        remove in interface Bag<E>
        Parameters:
        object - the object to remove
        nCopies - the number of copies to remove
        Returns:
        true if the bag changed
      • removeAll

        public boolean removeAll​(java.util.Collection<?> coll)
        Removes objects from the bag according to their count in the specified collection.
        Specified by:
        removeAll in interface Bag<E>
        Specified by:
        removeAll in interface java.util.Collection<E>
        Parameters:
        coll - the collection to use
        Returns:
        true if the bag changed
      • retainAll

        public boolean retainAll​(java.util.Collection<?> coll)
        Remove any members of the bag that are not in the given bag, respecting cardinality.
        Specified by:
        retainAll in interface Bag<E>
        Specified by:
        retainAll in interface java.util.Collection<E>
        Parameters:
        coll - the collection to retain
        Returns:
        true if this call changed the collection
      • toArray

        public java.lang.Object[] toArray()
        Returns an array of all of this bag's elements.
        Specified by:
        toArray in interface java.util.Collection<E>
        Returns:
        an array of all of this bag's elements
      • toArray

        public <T> T[] toArray​(T[] array)
        Returns an array of all of this bag's elements. If the input array has more elements than are in the bag, trailing elements will be set to null.
        Specified by:
        toArray in interface java.util.Collection<E>
        Type Parameters:
        T - the type of the array elements
        Parameters:
        array - the array to populate
        Returns:
        an array of all of this bag's elements
        Throws:
        java.lang.ArrayStoreException - if the runtime type of the specified array is not a supertype of the runtime type of the elements in this list
        java.lang.NullPointerException - if the specified array is null
      • uniqueSet

        public java.util.Set<E> uniqueSet()
        Returns an unmodifiable view of the underlying map's key set.
        Specified by:
        uniqueSet in interface Bag<E>
        Returns:
        the set of unique elements in this bag
      • equals

        public boolean equals​(java.lang.Object object)
        Compares this Bag to another. This Bag equals another Bag if it contains the same number of occurrences of the same elements.
        Specified by:
        equals in interface java.util.Collection<E>
        Overrides:
        equals in class java.lang.Object
        Parameters:
        object - the Bag to compare to
        Returns:
        true if equal
      • hashCode

        public int hashCode()
        Gets a hash code for the Bag compatible with the definition of equals. The hash code is defined as the sum total of a hash code for each element. The per element hash code is defined as (e==null ? 0 : e.hashCode()) ^ noOccurances). This hash code is compatible with the Set interface.
        Specified by:
        hashCode in interface java.util.Collection<E>
        Overrides:
        hashCode in class java.lang.Object
        Returns:
        the hash code of the Bag
      • toString

        public java.lang.String toString()
        Implement a toString() method suitable for debugging.
        Overrides:
        toString in class java.lang.Object
        Returns:
        a debugging toString