package com.interview.basics.model.collection.hash;
import java.util.Iterator;
/**
* Created with IntelliJ IDEA.
* User: stefanie
* Date: 7/15/14
* Time: 3:14 PM
*/
class SetEntry<K> implements Entry<K, K>{
int hash;
K item;
Entry<K, K> next;
SetEntry(int hash, K item, Entry<K, K> next) {
this.hash = hash;
this.item = item;
this.next = next;
}
@Override
public int hash() {
return hash;
}
@Override
public K key() {
return item;
}
@Override
public K value() {
return item;
}
@Override
public Entry<K, K> next() {
return next;
}
@Override
public void setValue(K value) {
item = value;
}
@Override
public void setNext(Entry<K, K> next) {
this.next = next;
}
}
public class HashSet<T> implements Set<T> {
HashContainer<T, T> container = new HashContainer<T, T>() {
@Override
protected Entry<T, T>[] initCapacity(int capacity) {
return (Entry<T, T>[]) new SetEntry[capacity];
}
@Override
protected Entry<T, T> getEntry(int hash, T key, T value, Entry<T, T> next) {
return new SetEntry(hash, key, next);
}
};
@Override
public void add(T element) {
container.put(element, element);
}
@Override
public boolean contains(T element) {
return container.get(element) != null;
}
@Override
public T remove(T element) {
return container.remove(element);
}
@Override
public int size() {
return container.count;
}
@Override
public boolean isEmpty() {
return container.count == 0;
}
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
Iterator<Entry<T, T>> itr = container.iterator();
@Override
public boolean hasNext() {
return itr.hasNext();
}
@Override
public T next() {
return itr.next().value();
}
@Override
public void remove() {
itr.remove();
}
};
}
}