Package net.shibboleth.shared.collection

# Class ClassIndexedSet<T>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractSet<T>
net.shibboleth.shared.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.

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`protected class`
`ClassIndexedSet.ClassIndexedSetIterator`
Iterator for set implementation `ClassIndexedSet`.

## Field Summary

Fields
Modifier and Type
Field
Description
`private final HashMap<Class<? extends T>,T>`
`index`
Storage for index of class -> member.
`private final HashSet<T>`
`set`
Storage for set members.

## Constructor Summary

Constructors
Constructor
Description
`ClassIndexedSet()`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`boolean`
`add(T o)`
`boolean`
`add(T o, boolean replace)`
Add member to set, optionally replacing any existing instance of the same class.
`void`
`clear()`
`boolean`
`contains(Class<? extends T> clazz)`
Check whether set contains an instance of the specified class.
`boolean`
`equals(Object obj)`
`<X extends T>
X`
`get(Class<X> clazz)`
Get the set element specified by the class parameter.
`protected <X extends T>
Class<X>`
`getIndexClass(X o)`
Get the index class of the specified object.
`int`
`hashCode()`
`Iterator<T>`
`iterator()`
`boolean`
`remove(Object o)`
`private void`
`removeFromIndex(T o)`
Remove the specified object from the index.
`int`
`size()`
`String`
`toString()`

### Methods inherited from class java.util.AbstractSet

`removeAll`

### Methods inherited from class java.util.AbstractCollection

`addAll, contains, containsAll, isEmpty, retainAll, toArray, toArray`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface java.util.Collection

`parallelStream, removeIf, stream, toArray`

### Methods inherited from interface java.lang.Iterable

`forEach`

### Methods inherited from interface java.util.Set

`addAll, contains, containsAll, isEmpty, removeAll, retainAll, spliterator, toArray, toArray`

## Field Details

### set

@Nonnull private final HashSet<T> set
Storage for set members.

### index

@Nonnull 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(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(@Nonnull 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>`