private void setNext() {
            // If already have a selected element, then select next value with same key
            if (selected != null && selected.hasNext()) {
                next = selected.getNext();
            } else { // Otherwise, look through table until next non-null element found
                while (idx < hashTable.length) {
                    if (hashTable[idx] != null) { // Found non-null element
                        next = hashTable[idx]; // Set it as next
                        idx++; // Increment index so we'll look at the following element next
                        return;
                    }
                    idx++;
                }
                next = null;
            }
        }
The <tt>keyHash</tt> is stored because we may have duplicate entries for a
given hash bucket for two reasons:

<ol>
  <li> Multiple value insertions for the same key (standard multimap behaviour)
  <li> Hash collision. The key is different, but maps to the same bucket.
</ol>

We can use the stored hash to rapidly differentiate between these scenarios
and in various operations such as delete.

@param key the key
@param value the value
@param keyHash the hash <strong>(NB: full hash, not just bucket index!)</strong>
gateway/engine/beans/src/main/java/io/apiman/gateway/engine/beans/util/CaseInsensitiveStringMultiMap.java