private final void rehash() {
        if (capacity == 0) {
            capacity = 32;
            names = new String[capacity];
            hash = new int[hashSize() + (capacity << 1)];
            return;
        }
        capacity = (capacity << 1);
        String[] n = names;
        names = new String[capacity];
        System.arraycopy(n, 0, names, 0, used);
        hash = new int[hashSize() + (capacity << 1)];
        for (int i = 0; i < used; i++) {
            int prev = Math.abs(names[i].hashCode() % hashSize());
            int entry = hash[prev];
            while (entry != 0) {
                prev = entry + 1;
                entry = hash[prev];
            }
            final int insertIdx = (hashSize() + (i << 1));
            hash[prev] = insertIdx;
            hash[insertIdx] = i;
        }
    }
A mapping from an arbitrary set of unique strings to a range of
integers.  Slime users normally won't need to use this class
directly.
vespajlib/src/main/java/com/yahoo/slime/SymbolTable.java