import { Observable, Subject } from "rxjs";
import { Cloneable } from "../util/interface/Cloneable";
import { Element } from "./Collection";
import { AbstractMap } from "./AbstractMap";
/**
 * Hash table based implementation of the `Map` interface. This implementation provides all of the optional map operations, and
 * permits _null_ values and the _null_ key. Keys with _undefined_ values are prohibited.
 */
export declare class HashMap<K, V> extends AbstractMap<K, V> implements Cloneable {
    private readonly _map;
    readonly contentChanged$: Subject<void>;
    /**
     * @constructor
     * @param entries
     * @throws IllegalArgumentException
     */
    constructor(entries?: Map<K, V> | Array<[K, V]>);
    /**
     * @override
     */
    get contentChanged(): Observable<void>;
    /**
     * @override
     */
    get size(): number;
    /**
     * @override
     */
    clear(): void;
    /**
     * @override
     */
    clone(): HashMap<K, V>;
    /**
     * @override
     */
    containsKey(key: K): boolean;
    /**
     * @override
     */
    containsValue(value: V): boolean;
    /**
     * @override
     */
    delete(key: K): boolean;
    /**
     * @override
     */
    entries(): IterableIterator<[K, V]>;
    /**
     * @override
     */
    forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void;
    /**
     * @override
     */
    get(key: K): V | undefined;
    /**
     * @override
     */
    has(key: K): boolean;
    /**
     * @override
     */
    keys(): IterableIterator<K>;
    /**
     * @override
     */
    keySet(): Set<K>;
    /**
     * @override
     */
    put(key: K, value: V): Element<V> | undefined;
    /**
     * @override
     */
    putAll<Key extends K, Value extends V>(map: Map<Key, Value>): void;
    /**
     * @override
     */
    remove(key: K): Element<V> | undefined;
    /**
     * @override
     */
    set(key: K, value: V): this;
    /**
     * @override
     */
    toString(): string;
    /**
     * @override
     */
    values(): IterableIterator<V>;
    /**
     * @override
     */
    [Symbol.iterator](): IterableIterator<[K, V]>;
    /**
     * @override
     */
    [Symbol.toStringTag]: string;
}
