protected int getHash(@Nullable Object o) {
        int hash = (o != null ? o.hashCode() : 0);
        hash += (hash << 15) ^ 0xffffcd7d;
        hash ^= (hash >>> 10);
        hash += (hash << 3);
        hash ^= (hash >>> 6);
        hash += (hash << 2) + (hash << 14);
        hash ^= (hash >>> 16);
        return hash;
    }
Get the hash for a given object, apply an additional hash function to reduce
collisions. This implementation uses the same Wang/Jenkins algorithm as
{link ConcurrentHashMap}. Subclasses can override to provide alternative hashing.

@param o the object to hash (may be null)
@return the resulting hash code
analyzer/src/main/java/nl/basjes/parse/useragent/utils/springframework/util/ConcurrentReferenceHashMap.java