HashTable是一个 JavaScript/TypeScript 的实现数据结构的哈希表(Hash Table)。哈希表是一种使用哈希函数将键映射到值的数据结构,它允许在平均情况下在 O(1) 时间内添加、删除和查找元素。

Example

// 创建一个新的 HashTable 实例。
const myTable = new HashTable<string, number>();

// 向哈希表中添加一些键值对。
myTable.add('apple', 5);
myTable.add('banana', 3);
myTable.add('cherry', 9);

// 获取指定键的值。
const bananaCount = myTable.getvalue('banana'); // 返回 3

// 替换指定键的值为新值。
myTable.replace('banana', 6);

// 删除指定键及其关联的值。
myTable.remove('cherry');

// 创建哈希表的一个副本。
const myTableCopy = myTable.clone();

// 清空哈希表中所有的键值对。
myTable.clear();

Type Parameters

  • K extends string | number = string

  • V = any

Hierarchy

  • HashTable

Constructors

  • Type Parameters

    • K extends string | number = string

    • V = any

    Returns HashTable<K, V>

Properties

_k_: string = 'key'

键名前缀

count: number = 0

公钥总数

keys: {
    [key: string]: V;
} = {}

公钥

Type declaration

  • [key: string]: V

Methods

  • 将键值对添加到哈希表中。

    Description

    该方法接受两个参数:keyvalue,分别表示要添加到哈希表中的键和与之相关联的值。它返回更新后的 HashTable 实例。

    该方法首先检查 key 是否为字符串类型且不包含指定的前缀。如果是这样,它会在 key 的前面添加前缀 "key_",以确保所有键都具有相同的格式。然后,它检查哈希表中是否已经存在该键。如果是这样,它直接返回当前哈希表实例。否则,它将键值对添加到哈希表中,并更新计数器。添加了类型定义注释后,可以更清晰地看到这一过程,并帮助其他开发人员理解如何正确使用此方法。

    Example

    // 创建一个新的 HashTable 实例,并向其中添加一些键值对。
    const myTable = new HashTable<string, number>();
    myTable.add('apple', 5);
    myTable.add('banana', 3);
    myTable.add('cherry', 9);

    // 尝试向哈希表中添加已存在的键值对。
    myTable.add('apple', 4); // 返回原始实例 myTable

    // 向哈希表中添加新的键值对。
    myTable.add('grape', 7);

    // 获取新添加键值对后的哈希表大小。
    const newTableSize = myTable.size(); // 返回 4

    Parameters

    • key: K

      要添加到哈希表中的键。

    • value: V

      与键关联的值。

    Returns HashTable<K, V>

    更新后的哈希表实例。

  • 清空哈希表中的所有键值对。

    Description

    该方法不接受任何参数,它会将哈希表中的所有键值对清除。具体来说,它将计数器设置为零,并创建一个新的空对象以替换当前 keys 对象。这将导致所有之前存在的键都被删除,并且哈希表现在为空。由于该方法没有返回值,因此添加类型定义注释并不是必需的,但它可以帮助其他开发人员理解该方法的行为。

    Example

    // 创建一个新的 HashTable 实例,并向其中添加一些键值对。
    const myTable = new HashTable<string, number>();
    myTable.add('apple', 5);
    myTable.add('banana', 3);
    myTable.add('cherry', 9);

    // 清空哈希表。
    myTable.clear();

    // 获取清空后的哈希表大小。
    const clearedTableSize = myTable.size(); // 返回 0

    Returns void

  • 创建当前哈希表的一个副本。

    Description

    该方法不接受任何参数。它返回一个与当前哈希表具有相同键值对的新 HashTable 实例。

    该方法首先将当前哈希表的 keys 属性赋值给一个变量 _keys。然后,它创建一个新的 HashTable 实例 ret。接下来,它遍历 _keys 中的所有键值对,并使用 add() 方法将它们添加到新的哈希表实例 ret 中。由于哈希表是基于引用的数据结构,因此在这种情况下,必须创建一个新的 HashTable 实例,而不能仅复制 this.keys 属性。最后,它返回新的哈希表实例 ret。添加了类型定义注释后,可以更清晰地看到这一过程,并帮助其他开发人员理解如何正确使用此方法。

    Example

    // 创建一个新的 HashTable 实例,并向其中添加一些键值对。
    const myTable = new HashTable<string, number>();
    myTable.add('apple', 5);
    myTable.add('banana', 3);
    myTable.add('cherry', 9);

    // 克隆哈希表。
    const clonedTable = myTable.clone();

    // 获取克隆后的哈希表大小。
    const clonedTableSize = clonedTable.size(); // 返回 3

    Returns HashTable<K, V>

    哈希表的副本。

  • 检查哈希表中是否包含指定的键。

    Description

    方法的主要作用是检查哈希表中是否包含指定的键。根据传入的参数类型 K,如果是字符串类型且不以 _k_ 开头,则将其转换成带有 _k_ 前缀的字符串类型。然后,使用 JavaScript 内置方法 Object.prototype.hasOwnProperty 检查键是否存在于哈希表中。如果存在,则返回 true,否则返回 false。这个方法在哈希表的查询操作中非常重要,可以帮助我们快速地判断一个键是否存在于哈希表中,从而实现 O(1) 的时间复杂度。

    Example

    // 创建一个新的 HashTable 实例,并向其中添加一些键值对。
    const myTable = new HashTable<string, number>();
    myTable.add('apple', 5);
    myTable.add('banana', 3);
    myTable.add('cherry', 9);

    // 检查哈希表中是否包含指定的键。
    const hasBanana = myTable.contains('banana'); // 返回 true
    const hasGrape = myTable.contains('grape'); // 返回 false

    Parameters

    • key: K

      要查找的键。

    Returns boolean

    如果哈希表包含该键,则返回 true,否则返回 false

  • 返回去除任何前缀后的键值。

    Description

    该方法接受一个泛型参数 K,并返回同样类型的值。它的作用是从输入键中提取对应的值,并去除任何可能存在的前缀。该方法首先检查 key 是否为字符串类型且以 _k_ 开头。如果是,则通过移除前四个字符来提取值,并将其转换回类型 K。否则,它会直接返回原始的 key 值。添加了类型定义注释后,可以更清晰地看到这一过程,并帮助其他开发人员理解如何正确使用此方法。

    Example

    // 创建一个新的 HashTable 实例,并向其中添加一些键值对。
    const myTable = new HashTable<string, number>();
    myTable.add('apple', 5);
    myTable.add('banana', 3);
    myTable.add('cherry', 9);

    // 获取指定键的实际值(去掉前缀)。
    const actualKey1 = myTable.getkey('key_apple'); // 返回 "apple"
    const actualKey2 = myTable.getkey('banana'); // 返回 "banana"

    Parameters

    • key: K

      要从中提取值的输入键。

    Returns K

    不带前缀的键值,或不包含前缀的原始键。

  • 返回与指定键相关联的值,或 undefined 如果键不存在。

    Description

    该方法接受一个参数 key,表示要获取其关联的值的键。它返回与该键相关联的值或 undefined

    该方法首先检查 key 是否为字符串类型且不包含指定的前缀。如果是这样,它会在 key 的前面添加前缀 "key_",以确保所有键都具有相同的格式。然后,它将使用 key 作为索引来访问哈希表,并返回相应的值。如果哈希表中不存在该键,则返回 undefined。添加了类型定义注释后,可以更清晰地看到这一过程,并帮助其他开发人员理解如何正确使用此方法。

    Example

    // 创建一个新的 HashTable 实例,并向其中添加一些键值对。
    const myTable = new HashTable<string, number>();
    myTable.add('apple', 5);
    myTable.add('banana', 3);
    myTable.add('cherry', 9);

    // 获取指定键的值。
    const appleCount = myTable.getvalue('apple'); // 返回 5
    const grapeCount = myTable.getvalue('grape'); // 返回 undefined

    Parameters

    • key: K

      要返回值的键。

    Returns undefined | V

    与键相关联的值,或 undefined 如果键不存在。

  • 从哈希表中删除指定键及其关联的值。

    Description

    该方法接受一个参数 key,表示要从哈希表中删除的键。它返回更新后的 HashTable 实例。

    该方法首先检查 key 是否为字符串类型且不包含指定的前缀。如果是这样,它会在 key 的前面添加前缀 "key_",以确保所有键都具有相同的格式。然后,它检查哈希表中是否存在该键。如果是这样,它将计数器减一,并将该键对应的值设置为 undefined。最后,它从哈希表中删除该键。添加了类型定义注释后,可以更清晰地看到这一过程,并帮助其他开发人员理解如何正确使用此方法。

    Example

    // 创建一个新的 HashTable 实例,并向其中添加一些键值对。
    const myTable = new HashTable<string, number>();
    myTable.add('apple', 5);
    myTable.add('banana', 3);
    myTable.add('cherry', 9);

    // 尝试从哈希表中删除不存在的键值对。
    myTable.remove('grape'); // 返回原始实例 myTable

    // 从哈希表中删除指定的键值对。
    myTable.remove('banana');

    // 获取新删除键值对后的哈希表大小。
    const newTableSize = myTable.size(); // 返回 2

    Parameters

    • key: K

      要删除的键。

    Returns HashTable<K, V>

    更新后的哈希表实例。

  • 替换指定键的值为新值。

    Description

    该方法接受两个参数:keynewvalue,分别表示要替换其值的键和要与之相关联的新值。它返回更新后的 HashTable 实例。

    该方法首先检查 key 是否为字符串类型且不包含指定的前缀。如果是这样,它会在 key 的前面添加前缀 "key_",以确保所有键都具有相同的格式。然后,它检查哈希表中是否存在该键。如果是这样,它将该键对应的值替换为新值。最后,它返回更新后的哈希表实例。添加了类型定义注释后,可以更清晰地看到这一过程,并帮助其他开发人员理解如何正确使用此方法。

    Example

    // 创建一个新的 HashTable 实例,并向其中添加一些键值对。
    const myTable = new HashTable<string, number>();
    myTable.add('apple', 5);
    myTable.add('banana', 3);
    myTable.add('cherry', 9);

    // 尝试替换哈希表中不存在的键值对。
    myTable.replace('grape', 7); // 返回原始实例 myTable

    // 替换哈希表中存在的键值对。
    myTable.replace('banana', 6);

    // 获取新替换键值对后的哈希表大小。
    const newTableSize = myTable.size(); // 返回 3

    Parameters

    • key: K

      要替换其值的键。

    • newvalue: V

      要与键相关联的新值。

    Returns HashTable<K, V>

    更新后的哈希表实例。

  • 从哈希表中安全删除指定键及其关联的值。

    Description

    该方法接受一个参数 key,表示要从哈希表中删除的键。它返回更新后的 HashTable 实例。

    该方法首先检查 key 是否为字符串类型且不包含指定的前缀。如果是这样,它会在 key 的前面添加前缀 "key_",以确保所有键都具有相同的格式。然后,它直接从哈希表中删除该键,并将计数器减一。与 remove() 方法不同的是,它不会将键对应的值设置为 undefined。这意味着,如果再次访问该键,将返回 undefined。添加了类型定义注释后,可以更清晰地看到这一过程,并帮助其他开发人员理解如何正确使用此方法。

    Example

    // 创建一个新的 HashTable 实例,并向其中添加一些键值对。
    const myTable = new HashTable<string, number>();
    myTable.add('apple', 5);
    myTable.add('banana', 3);
    myTable.add('cherry', 9);

    // 尝试从哈希表中安全删除不存在的键值对。
    myTable.saferemove('grape'); // 返回原始实例 myTable

    // 从哈希表中安全删除指定的键值对。
    myTable.saferemove('banana');

    // 获取新删除键值对后的哈希表大小。
    const newTableSize = myTable.size(); // 返回 2

    Parameters

    • key: K

      要删除的键。

    Returns HashTable<K, V>

    更新后的哈希表实例。

  • 返回哈希表中键值对的数量。

    Description

    方法的作用是返回哈希表中键值对的数量。由于实现中已经使用了变量 count 来记录哈希表中键值对的数量,因此该方法只需要简单地返回 count 变量即可。在哈希表的操作中,我们通常需要了解哈希表中有多少键值对,因此这个方法非常重要。通过调用 size 方法,我们可以快速地获得当前哈希表中键值对的数量。

    Example

    // 创建一个新的 HashTable 实例,并向其中添加一些键值对。
    const myTable = new HashTable<string, number>();
    myTable.add('apple', 5);
    myTable.add('banana', 3);
    myTable.add('cherry', 9);

    // 获取哈希表中键值对的个数。
    const tableSize = myTable.size(); // 返回 3

    Returns number

    哈希表中键值对的数量。

Generated using TypeDoc