This should only work if `capacity - LOAD_FACTOR * capacity >= 1`. Otherwise, with `LOAD_FACTOR` close enough to `1.0` and `capacity` small enough, there would be no free space for the store operation and the loop would not terminate. I'd check that that condition is true on instantiation. Once it's true, you maintain the needed space with `incrementSize()`/`growTable()` calls.

In any case, it would do no harm to iterate only `capacity` times, then fall through to an error message, like in CLRS.

It seems like this search logic could be extracted and shared with `apply()` and `changeValue()`.

Last week you were talking of using double hashing...?