won't this cause a problem if someone uses an empty object as the key? Shouldn't the empty value be some sort of private constructor?