Generally, you cannot assume that your application can produce uniformly distributed keys; the hash functions in Chapter 6 are only heuristics. They make no guarantees about the results of hashing application keys and thus risk pathological cases where operations are linear rather than constant.
Since you cannot make assumptions about your hash keys, there is another technique you can employ: randomizing the hash functions. Instead of using a fixed hash function that might be sensitive to pathological keys, you can use a family of functions and sample from it. You can rely on random functions ...