@SuppressWarnings("unchecked")
	public boolean equals(Object o){
		if(o == null) return false;
		
		if(o.getClass() == getClass()){
			ShareableHashMap<K, V> other = (ShareableHashMap<K, V>) o;
			
			if(other.currentHashCode != currentHashCode) return false;
			if(other.size() != size()) return false;
		
			if(isEmpty()) return true; // No need to check if the maps are empty.
			
			Iterator<Map.Entry<K, V>> otherIterator = other.entryIterator();
			while(otherIterator.hasNext()){
				Map.Entry<K, V> entry = otherIterator.next();
				V otherValue = entry.getValue();
				V thisValue = get(entry.getKey());
				if(otherValue != thisValue && thisValue != null && !thisValue.equals(entry.getValue())) return false;
			}
			return true;
		}
		
		return false;
	}