Class ClassIndexedSet<T>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractSet<T>
net.shibboleth.utilities.java.support.collection.ClassIndexedSet<T>
Type Parameters:
T - the type of object stored by this class
All Implemented Interfaces:
Iterable<T>, Collection<T>, Set<T>
Direct Known Subclasses:
CriteriaSet

public class ClassIndexedSet<T> extends AbstractSet<T> implements Set<T>
Set implementation which provides indexed access to set members via their class, and which allows only one instance of a given class to be present in the set. Null members are not allowed.
  • Field Details

    • set

      private final HashSet<T> set
      Storage for set members.
    • index

      private final HashMap<Class<? extends T>,T> index
      Storage for index of class -> member.
  • Constructor Details

    • ClassIndexedSet

      public ClassIndexedSet()
      Constructor.
  • Method Details

    • add

      public boolean add(T o)
      Specified by:
      add in interface Collection<T>
      Specified by:
      add in interface Set<T>
      Overrides:
      add in class AbstractCollection<T>
    • add

      public boolean add(@Nonnull T o, boolean replace)
      Add member to set, optionally replacing any existing instance of the same class.
      Parameters:
      o - the object to add
      replace - flag indicating whether to replace an existing class type
      Returns:
      true if object was added
    • clear

      public void clear()
      Specified by:
      clear in interface Collection<T>
      Specified by:
      clear in interface Set<T>
      Overrides:
      clear in class AbstractCollection<T>
    • remove

      public boolean remove(@Nullable Object o)
      Specified by:
      remove in interface Collection<T>
      Specified by:
      remove in interface Set<T>
      Overrides:
      remove in class AbstractCollection<T>
    • iterator

      @Nonnull public Iterator<T> iterator()
      Specified by:
      iterator in interface Collection<T>
      Specified by:
      iterator in interface Iterable<T>
      Specified by:
      iterator in interface Set<T>
      Specified by:
      iterator in class AbstractCollection<T>
    • size

      public int size()
      Specified by:
      size in interface Collection<T>
      Specified by:
      size in interface Set<T>
      Specified by:
      size in class AbstractCollection<T>
    • contains

      public boolean contains(@Nullable Class<? extends T> clazz)
      Check whether set contains an instance of the specified class.
      Parameters:
      clazz - the class to check
      Returns:
      true if set contains an instance of the specified class, false otherwise
    • get

      @Nullable public <X extends T> X get(@Nullable Class<X> clazz)
      Get the set element specified by the class parameter.
      Type Parameters:
      X - generic parameter which eliminates need for casting by the caller
      Parameters:
      clazz - the class to whose instance is to be retrieved
      Returns:
      the element whose class is of the type specified
    • getIndexClass

      @Nonnull protected <X extends T> Class<X> getIndexClass(@Nonnull X o)
      Get the index class of the specified object. Subclasses may override to use a class index other than the main runtime class of the object.
      Type Parameters:
      X - generic parameter which eliminates need for casting by the caller
      Parameters:
      o - the object whose class index to determine
      Returns:
      the class index value associated with the object instance
    • removeFromIndex

      private void removeFromIndex(T o)
      Remove the specified object from the index.
      Parameters:
      o - the object to remove
    • toString

      public String toString()
      Overrides:
      toString in class AbstractCollection<T>
    • equals

      public boolean equals(Object obj)
      Specified by:
      equals in interface Collection<T>
      Specified by:
      equals in interface Set<T>
      Overrides:
      equals in class AbstractSet<T>
    • hashCode

      public int hashCode()
      Specified by:
      hashCode in interface Collection<T>
      Specified by:
      hashCode in interface Set<T>
      Overrides:
      hashCode in class AbstractSet<T>