package speiger.src.collections.PACKAGE.sets; #if TYPE_OBJECT import java.util.Objects; #endif import java.util.Set; import speiger.src.collections.PACKAGE.collections.ABSTRACT_COLLECTION; import speiger.src.collections.PACKAGE.collections.ITERATOR; /** * Abstract Type Specific Set that reduces boxing/unboxing * @Type(T) */ public abstract class ABSTRACT_SET KEY_GENERIC_TYPE extends ABSTRACT_COLLECTION KEY_GENERIC_TYPE implements SET KEY_GENERIC_TYPE { #if TYPE_OBJECT @Override public KEY_TYPE addOrGet(KEY_TYPE o) { throw new UnsupportedOperationException(); } #endif @Override public abstract ITERATOR KEY_GENERIC_TYPE iterator(); @Override public ABSTRACT_SET KEY_GENERIC_TYPE copy() { throw new UnsupportedOperationException(); } @Override public int hashCode() { int hashCode = 0; ITERATOR KEY_GENERIC_TYPE i = iterator(); while(i.hasNext()) hashCode += KEY_TO_HASH(i.NEXT()); return hashCode; } @Override public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof Set)) return false; Set l = (Set)o; if(l.size() != size()) return false; try { return containsAll(l); } catch (ClassCastException | NullPointerException unused) { return false; } } }