package org.bukkit.craftbukkit.util;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import com.koloboke.collect.set.hash.HashObjSets;
public class HashTreeSet<V> implements Set<V> {
private Set<V> hash = HashObjSets.newMutableSet();
private TreeSet<V> tree = new TreeSet<V>();
public HashTreeSet() {}
@Override
public int size() {
return hash.size();
}
@Override
public boolean isEmpty() {
return hash.isEmpty();
}
@Override
public boolean contains(Object o) {
return hash.contains(o);
}
@Override
public Iterator<V> iterator() {
return new Iterator<V>() {
private Iterator<V> it = tree.iterator();
private V last;
@Override
public boolean hasNext() {
return it.hasNext();
}
@Override
public V next() {
return last = it.next();
}
@Override
public void remove() {
if (last == null) {
throw new IllegalStateException();
}
it.remove();
hash.remove(last);
last = null;
}
};
}
@Override
public Object[] toArray() {
return hash.toArray();
}
@Override
public Object[] toArray(Object[] a) {
return hash.toArray(a);
}
@Override
public boolean add(V e) {
hash.add(e);
return tree.add(e);
}
@Override
public boolean remove(Object o) {
hash.remove(o);
return tree.remove(o);
}
@Override
public boolean containsAll(Collection c) {
return hash.containsAll(c);
}
@Override
public boolean addAll(Collection c) {
tree.addAll(c);
return hash.addAll(c);
}
@Override
public boolean retainAll(Collection c) {
tree.retainAll(c);
return hash.retainAll(c);
}
@Override
public boolean removeAll(Collection c) {
tree.removeAll(c);
return hash.removeAll(c);
}
@Override
public void clear() {
hash.clear();
tree.clear();
}
public V first() {
return tree.first();
}
}