public boolean equals(Object y) {
		if (y == this)
			return true;
		if (y == null)
			return false;
		if (y.getClass() != this.getClass())
			return false;
		SET<Key> that = (SET<Key>) y;
		if (this.size() != that.size())
			return false;
		try {
			for (Key k : this)
				if (!that.contains(k))
					return false;
		} catch (ClassCastException exception) {
			return false;
		}
		return true;
	}