@Override
    public IStringMultiMap add(String key, String value) {
        long hash = getHash(key);
        int idx = getIndex(hash);
        Element existingHead = hashArray[idx];
        if (existingHead == null) {
            hashArray[idx] = new Element(key, value, hash);
            keyCount++;
        } else { // Last element appears first in list.
            if (existingHead.getByHash(hash, key) == null) {
                keyCount++; // If it's a unique key collision and we've not actually seen this key before.
            }
            Element newHead = new Element(key, value, hash);
            newHead.previous = existingHead;
            hashArray[idx] = newHead;
        }
        return this;
    }
A simple multimap able to accept multiple values for a given key.
<p>
The implementation is specifically tuned for headers (such as HTTP), where
the number of entries tends to be moderate, but are frequently accessed.
</p>
<p>
This map expects ASCII for key strings.
</p>
<p>
Case is ignored (avoiding {@link String#toLowerCase()} <code>String</code> allocation)
before being hashed (<code>xxHash</code>).
</p>
<p>
    Constraints:
<ul>
  <li><strong>Not thread-safe.</strong></li>
  <li><tt>Null</tt> is <strong>not</strong> a valid key.</li>
</ul>
</p>

@author Marc Savy {@literal <msavy@redhat.com>}
gateway/engine/beans/src/main/java/io/apiman/gateway/engine/beans/util/CaseInsensitiveStringMultiMap.java