get(key) {

        // first, ensure the key is valid
        assertNonEmptyString(key);

        /*
         * Next, calculate the hash code from the string key. The hash code
         * is then used to determine the index into the array where the data
         * should be stored.
         */
        const hashCode = hashCodePoints(key);
        const index = getArrayIndexFromHashCode(hashCode);

        /*
         * Special case: If the calculated index in the array hasn't yet
         * been initialized, then the key doesn't exist. Return
         * `undefined` to indicate the key doesn't exist.
         */
        if (this[array][index] === undefined) {
            return undefined;
        }

        /*
         * If we've made it to here, then there is a linked list in the
         * array at this location, so try to find the key that matches.
         */
        const result = this[array][index].find((value) => {
            return value.key === key;
        });

        /*
         * If an item with the given hash code and key was not found, then
         * there is no value to return. Just return undefined.
         */
        if (result === undefined) {
            return undefined;
        }

        /*
         * If we've made it to here, it means that the hash code and key were
         * found, so return the value.
         */
        return result.value;
    }
Retrieves a key-value pair from the hash map.
@param {string} key The key whose value should be retrieved.
@returns {*} The value associated with the key or `undefined` if the
     key doesn't exist in the hash map.
@throws {TypeError} If the key isn't a non-empty string.