net.spy.util
Class ReferenceSet<T>

java.lang.Object
  extended by java.util.AbstractCollection<E>
      extended by java.util.AbstractSet<T>
          extended by net.spy.util.ReferenceSet<T>
All Implemented Interfaces:
java.lang.Iterable<T>, java.util.Collection<T>, java.util.Set<T>
Direct Known Subclasses:
SoftHashSet

public abstract class ReferenceSet<T>
extends java.util.AbstractSet<T>

This class aids in implementing sets of references.


Constructor Summary
ReferenceSet()
          Get an instance of ReferenceSet.
ReferenceSet(java.util.Collection<T> c)
          Get a ReferenceSet with the contents from the given Collection.
ReferenceSet(int n)
          Create a ReferenceSet with the given capacity.
 
Method Summary
 boolean add(T o)
          Add an object to the Set.
protected abstract  java.lang.ref.Reference<T> getReference(T o)
          Obtain the desired type of reference to the given object.
 java.util.Iterator<T> iterator()
          Get an iterator.
 int size()
          Get the current size of the Set.
 
Methods inherited from class java.util.AbstractSet
equals, hashCode, removeAll
 
Methods inherited from class java.util.AbstractCollection
addAll, clear, contains, containsAll, isEmpty, remove, retainAll, toArray, toArray, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.util.Set
addAll, clear, contains, containsAll, isEmpty, remove, retainAll, toArray, toArray
 

Constructor Detail

ReferenceSet

public ReferenceSet()
Get an instance of ReferenceSet.


ReferenceSet

public ReferenceSet(int n)
Create a ReferenceSet with the given capacity.

Parameters:
n - the initial capacity

ReferenceSet

public ReferenceSet(java.util.Collection<T> c)
Get a ReferenceSet with the contents from the given Collection.

Parameters:
c - the collection
Method Detail

add

public boolean add(T o)
Add an object to the Set.

Specified by:
add in interface java.util.Collection<T>
Specified by:
add in interface java.util.Set<T>
Overrides:
add in class java.util.AbstractCollection<T>
Parameters:
o - the object
Returns:
true if the object did not already exist

size

public int size()
Get the current size of the Set. This is not an entirely cheap operation, as it walks the entire iterator to make sure all entries are still valid references.

Specified by:
size in interface java.util.Collection<T>
Specified by:
size in interface java.util.Set<T>
Specified by:
size in class java.util.AbstractCollection<T>

iterator

public java.util.Iterator<T> iterator()
Get an iterator. This iterator does not support removing entries due to limitations with HashMap and Iterator that would otherwise require me to duplicate all of HashMap.

Specified by:
iterator in interface java.lang.Iterable<T>
Specified by:
iterator in interface java.util.Collection<T>
Specified by:
iterator in interface java.util.Set<T>
Specified by:
iterator in class java.util.AbstractCollection<T>

getReference

protected abstract java.lang.ref.Reference<T> getReference(T o)
Obtain the desired type of reference to the given object.

Unfortunately, java doesn't give me a way to enforce this in the language (i.e. at compile time), but subclasses of ReferenceSet must implement hashCode() and equals() in such a way that they return what the referenced object would return if the object were not a reference. If the reference has disappeared, equals() should return false, and hashCode should return 0.

Parameters:
o - an object
Returns:
a reference to that object


Copyright © 1995-2007 SPY Internetworking. All Rights Reserved.