package org.limewire.collection;
import java.util.Collection;
import java.util.Iterator;
/**
* A variant of {@link FixedSizeArrayHashSet} that allows iterations over
* its elements in random order.
*
<pre>
LinkedList<Integer> linkedlist1 = new LinkedList<Integer>();
for(int i = 0; i < 5; i++)
linkedlist1.add(i);
RandomOrderHashSet<Integer> rohs = new RandomOrderHashSet<Integer>(linkedlist1);
System.out.println(rohs);
Random Output:
[1, 3, 0, 2, 4]
</pre>
*/
public class RandomOrderHashSet<T> extends FixedSizeArrayHashSet<T> {
public RandomOrderHashSet(Collection<? extends T> c) {
super(c);
}
public RandomOrderHashSet(int capacity, Collection<? extends T> c) {
super(capacity, c);
}
public RandomOrderHashSet(int maxSize, int initialCapacity, float loadFactor) {
super(maxSize, initialCapacity, loadFactor);
}
public RandomOrderHashSet(int initialCapacity) {
super(initialCapacity);
}
@Override
public Iterator<T> iterator() {
return new RandomIterator();
}
private class RandomIterator extends UnmodifiableIterator<T> {
private final Iterator<Integer> sequence = new RandomSequence(size()).iterator();
public boolean hasNext() {
return sequence.hasNext();
}
public T next() {
return get(sequence.next());
}
}
}