/**
 * Represents a read-only hash map data structure that can be cloned.
 *
 * @category Utilities
 */
export interface ReadonlyHashMap<K, V> extends ReadonlyMap<K, V> {
    /**
     * Creates a mutable copy of this map with the same hash
     * and equality functions.
     */
    clone(): HashMap<K, V>;
}
/**
 * Represents a read-only hash set data structure that can be cloned.
 *
 * @category Utilities
 */
export interface ReadonlyHashSet<K> extends ReadonlySet<K> {
    /**
     * Creates a mutable copy of this set with the same hash
     * and equality functions.
     */
    clone(): HashSet<K>;
}
/**
 * Implements a basic hash map data structure with ability to pass custom hash
 * and equality comparison functions.
 *
 * @category Utilities
 */
export declare class HashMap<K, V> implements ReadonlyMap<K, V> {
    private hashKey;
    private equalKeys;
    private readonly map;
    private _size;
    constructor(hashKey: (key: K) => number, equalKeys: (k1: K, k2: K) => boolean);
    get size(): number;
    has(key: K): boolean;
    get(key: K): V | undefined;
    set(key: K, value: V): this;
    delete(key: K): boolean;
    clear(): void;
    clone(): HashMap<K, V>;
    forEach(callback: (value: V, key: K, map: ReadonlyMap<K, V>) => void): void;
    keys(): IterableIterator<K>;
    values(): IterableIterator<V>;
    entries(): IterableIterator<[K, V]>;
    [Symbol.iterator](): IterableIterator<[K, V]>;
}
/**
 * Implements a basic hash set data structure with ability to pass custom hash
 * and equality comparison functions.
 *
 * @category Utilities
 */
export declare class HashSet<K> implements ReadonlyHashSet<K> {
    private hashCode;
    private equals;
    private map;
    constructor(hashCode: (key: K) => number, equals: (k1: K, k2: K) => boolean);
    get size(): number;
    has(key: K): boolean;
    add(key: K): this;
    delete(key: K): boolean;
    clear(): void;
    clone(): HashSet<K>;
    forEach(callback: (value: K, key: K, set: ReadonlySet<K>) => void): void;
    keys(): IterableIterator<K>;
    values(): IterableIterator<K>;
    entries(): IterableIterator<[K, K]>;
    [Symbol.iterator](): IterableIterator<K>;
}
//# sourceMappingURL=hashMap.d.ts.map