@Override
	public boolean add(T e) {
		if (e == null)
			throw new RuntimeException("Does not permit nulls");
		int code=System.identityHashCode(e);
		int hash =hash(code);
		int hash2 = hash2(code);
		int hash3 =hash3(code);
		hash =hash & mask;
		hash2 =hash2 & mask;
		hash3 =hash3 & mask;
		//inlining for performance. makes add about 20% faster
		if (e==table[hash] || e==table[hash2] || e==table[hash3])
			return false;
		if(table[hash]==null){
			table[hash]=e;
		}else if(table[hash2]==null){
			table[hash2]=e;
		}else if(table[hash3]==null){
			table[hash3]=e;
		}else{
			T pushed=table[hash];
			table[hash]=e;
			//System.out.println("Pushing "+e);
			pushInsert(pushed);
		}
		size++;
		// check size... to avoid cascading rehashes.
		if (size > threshold)
			rehash();
		return true;
	}