synchronized public boolean insert(T item) {
		int initHashIdx = alg.hash(item);
		if(initHashIdx < 0) {
			// Failed to get hash index
			return false;
		}
		
		int hashIdx = initHashIdx;
		int retry = 0;
		while(bucket[hashIdx]!=null) {
			retry++;
			if(bucket[hashIdx].equals(item)) {
				System.out.println("Item is already exists.");
				return false;
			} else {
				hashIdx = collisionResolution.next(hashIdx, retry);
				if(hashIdx < 0) {
					// Failed to get next index
					return false;
				}
				if(hashIdx == initHashIdx) {
					System.out.println("Hash bucket is full.");
					return false;
				}
			}
		}
		bucket[hashIdx] = item;
		currCount++;
		
		if(needResize()) {
			return resize();
		} else {
			return true;
		}
	}