HashMap 和 HashTable 纯数据结构的区别
Difference between HashMap and HashTable purely in Data Structures
HashTable
和 HashMap
之间有什么区别 纯粹是在数据结构的上下文中(而不是在 Java 或任何其他语言中)?
我见过人们将这些术语互换地用于同一概念。它完全没有区别吗纯粹在数据结构的上下文中?
C 没有任何内置容器(数组除外),因此由各个实现者决定如何调用它。就C而言,HashMap vs. HashTable没有任何实际意义。
一个可能 区别在于后备存储的设置方式。散列 table 可能是键和值的简单线性数组,由散列索引。散列 map 可以是按键排序的平衡树,以及将散列映射到树节点的 table,允许快速 (O(1)) 查找和按键顺序遍历数据的能力。
或者它可能是完全不同的东西。同样,C 没有任何类型的内置容器来处理这类事情,因此这些名称在 C 上下文中没有任何实际意义。
在计算科学术语中,map 是从键到值的关联容器映射。换句话说,您可以执行诸如“对于键 K 记住值 V”和稍后“对于键 K 获取值”之类的操作。映射可以通过多种方式实现 - 例如,使用(可选平衡的)二叉树或散列 table,甚至存储 key/value.
的连续结构数组
A hash table是一种用于存储任意数据的结构,该数据不一定由单独的键和值组成。例如,我可以有一个散列 table 包含值 { 1, 10, 33, 97 },这将是它们自己的键。当没有与键不同的值时,这有时被称为“集合”,而散列 table 实现称为“散列集”。散列的定义质量 table 是散列函数根据键数据计算数组索引,不同的键往往会产生不同的索引,从而允许恒定时间访问数组元素 likely 包含密钥。这是一种实现/性能质量,而不是像定义 map.
那样的功能质量
因此,散列 table 存储元素,每个元素不需要包含不同的键和值组件,但如果有,那么它也是 也 哈希映射.
hashmap 和 hashtable 之间的解释非常正确,因为它也适用于 strmap.c 中实现的字符串哈希映射的 header,其中 stringmap 是满足 a 属性的字符串的哈希表键,value-structure。这里说:
/*
* strmap version 2.0.1<br>
*
* ANSI C hash table for strings.
*
* Version history:
* 1.0.0 - initial release
* 2.0.0 - changed function prefix from strmap to sm to ensure
* ANSI C compatibility
* 2.0.1 - improved documentation<
*
* strmap.c
*
* Copyright (c) 2009, 2011, 2013 Per Ola Kristensson.
*
* Per Ola Kristensson <pok21@cam.ac.uk>
* Inference Group, Department of Physics
* University of Cambridge
* Cavendish Laboratory
* JJ Thomson Avenue
* CB3 0HE Cambridge
* United Kingdom
*
* strmap is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* strmap is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with strmap. If not, see <http://www.gnu.org/licenses/>.
*/
#include "strmap.h"
typedef struct Pair Pair;
typedef struct Bucket Bucket;
struct Pair {
char *key;
char *value;
};
我是这样理解的:
哈希Table:我们在计算机科学中所说的概念
Hash Map:在Java
中叫什么
哈希集(HashSet):我们只关心唯一键的情况(或者你可以把它看成一个我们忽略值的哈希Table,我们只想知道唯一键的集合是什么)
或者简单地说,
哈希 Table (CS) = HashMap (Java) = 字典 (Python)
哈希集 (CS) = HashSet (Java) = 集合 (Python)
我仅从数据结构的角度理解 Hashmap 和 Hashtable 之间的区别,忽略实现它的技术如下:
哈希图:
是一种更高层次的数据结构,以键值对的方式组织数据。例如:黄页;
哈希表:
是一种关键信息与值直接相关的 Hashmap,通常通过使用值作为源应用哈希函数生成,但不一定非要这样才能被视为哈希表。如上所述,具有与值相同的键仍将被视为哈希表。
HashTable
和 HashMap
之间有什么区别 纯粹是在数据结构的上下文中(而不是在 Java 或任何其他语言中)?
我见过人们将这些术语互换地用于同一概念。它完全没有区别吗纯粹在数据结构的上下文中?
C 没有任何内置容器(数组除外),因此由各个实现者决定如何调用它。就C而言,HashMap vs. HashTable没有任何实际意义。
一个可能 区别在于后备存储的设置方式。散列 table 可能是键和值的简单线性数组,由散列索引。散列 map 可以是按键排序的平衡树,以及将散列映射到树节点的 table,允许快速 (O(1)) 查找和按键顺序遍历数据的能力。
或者它可能是完全不同的东西。同样,C 没有任何类型的内置容器来处理这类事情,因此这些名称在 C 上下文中没有任何实际意义。
在计算科学术语中,map 是从键到值的关联容器映射。换句话说,您可以执行诸如“对于键 K 记住值 V”和稍后“对于键 K 获取值”之类的操作。映射可以通过多种方式实现 - 例如,使用(可选平衡的)二叉树或散列 table,甚至存储 key/value.
的连续结构数组A hash table是一种用于存储任意数据的结构,该数据不一定由单独的键和值组成。例如,我可以有一个散列 table 包含值 { 1, 10, 33, 97 },这将是它们自己的键。当没有与键不同的值时,这有时被称为“集合”,而散列 table 实现称为“散列集”。散列的定义质量 table 是散列函数根据键数据计算数组索引,不同的键往往会产生不同的索引,从而允许恒定时间访问数组元素 likely 包含密钥。这是一种实现/性能质量,而不是像定义 map.
那样的功能质量因此,散列 table 存储元素,每个元素不需要包含不同的键和值组件,但如果有,那么它也是 也 哈希映射.
hashmap 和 hashtable 之间的解释非常正确,因为它也适用于 strmap.c 中实现的字符串哈希映射的 header,其中 stringmap 是满足 a 属性的字符串的哈希表键,value-structure。这里说:
/*
* strmap version 2.0.1<br>
*
* ANSI C hash table for strings.
*
* Version history:
* 1.0.0 - initial release
* 2.0.0 - changed function prefix from strmap to sm to ensure
* ANSI C compatibility
* 2.0.1 - improved documentation<
*
* strmap.c
*
* Copyright (c) 2009, 2011, 2013 Per Ola Kristensson.
*
* Per Ola Kristensson <pok21@cam.ac.uk>
* Inference Group, Department of Physics
* University of Cambridge
* Cavendish Laboratory
* JJ Thomson Avenue
* CB3 0HE Cambridge
* United Kingdom
*
* strmap is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* strmap is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with strmap. If not, see <http://www.gnu.org/licenses/>.
*/
#include "strmap.h"
typedef struct Pair Pair;
typedef struct Bucket Bucket;
struct Pair {
char *key;
char *value;
};
我是这样理解的:
哈希Table:我们在计算机科学中所说的概念
Hash Map:在Java
中叫什么
哈希集(HashSet):我们只关心唯一键的情况(或者你可以把它看成一个我们忽略值的哈希Table,我们只想知道唯一键的集合是什么)
或者简单地说,
哈希 Table (CS) = HashMap (Java) = 字典 (Python)
哈希集 (CS) = HashSet (Java) = 集合 (Python)
我仅从数据结构的角度理解 Hashmap 和 Hashtable 之间的区别,忽略实现它的技术如下:
哈希图: 是一种更高层次的数据结构,以键值对的方式组织数据。例如:黄页;
哈希表: 是一种关键信息与值直接相关的 Hashmap,通常通过使用值作为源应用哈希函数生成,但不一定非要这样才能被视为哈希表。如上所述,具有与值相同的键仍将被视为哈希表。