export class HashMap<K, V> implements Iterable<[V, K]> {
    constructor({
                    keyHashFunction,
                    keyEqualityFunction,
                    capacity,
                    loadFactor
                }: {
        keyHashFunction?: (k: K) => number,
        keyEqualityFunction?: (a: K, b: K) => boolean,
        capacity?: number,
        loadFactor?: number
    })

    constructor()

    get size(): number

    set(key: K, value: V): void

    get(key: K): V | undefined

    getOrCompute(key: K, compute: (k: K) => V, thisArg?: any): V

    getOrSet(key: K, default_value: V): V

    has(key: K): boolean

    delete(key: K): boolean

    clear(): void

    forEach(callback: (value: V, key: K, map: this) => any, thisArg?: any): void

    [Symbol.iterator](): IterableIterator<[K, V]>

    values(): IterableIterator<V>

    keys(): IterableIterator<K>
}

