Data structures HashMap和HashTable之间的区别纯粹在于数据结构

Data structures HashMap和HashTable之间的区别纯粹在于数据结构,data-structures,hash,hashmap,hashtable,Data Structures,Hash,Hashmap,Hashtable,纯粹在数据结构的上下文中(而不是在Java或任何其他语言中),HashTable和HashMap之间有什么区别 我见过人们在同一个概念中交替使用这些术语。仅仅在数据结构的上下文中,它没有任何区别吗?C没有任何内置容器(除了数组之外),因此,如何调用它取决于各个实现者。就C而言,HashMap和HashTable没有真正的意义 一个可能的区别可能是备份存储的设置方式。哈希表可以是键和值的简单线性数组,通过哈希索引。散列映射可以是按键排序的平衡树,以及将散列映射到树节点的表,允许快速(O(1))查找

纯粹在数据结构的上下文中(而不是在Java或任何其他语言中),
HashTable
HashMap
之间有什么区别


我见过人们在同一个概念中交替使用这些术语。仅仅在数据结构的上下文中,它没有任何区别吗?

C没有任何内置容器(除了数组之外),因此,如何调用它取决于各个实现者。就C而言,HashMap和HashTable没有真正的意义

一个可能的区别可能是备份存储的设置方式。哈希表可以是键和值的简单线性数组,通过哈希索引。散列映射可以是按键排序的平衡树,以及将散列映射到树节点的表,允许快速(O(1))查找和以键顺序遍历数据的能力


或者它可能是完全不同的东西。同样,C没有任何类型的内置容器来处理这类事情,因此在C上下文中,名称实际上没有任何意义。

在计算科学术语中,a是从键到值的关联容器映射。换言之,您可以执行诸如“为键K记住值V”和稍后的“为键K获取值”之类的操作。映射可以通过多种方式实现——例如,使用(可选平衡的)二叉树、哈希表,甚至是存储键/值的连续结构数组

哈希表是用于存储任意数据的结构,该数据不一定由单独的键和值组成。例如,我可以有一个包含值{1,10,33,97}的哈希表,这些值是它们自己的键。当没有与键不同的值时,这有时称为“集”,在哈希表实现中称为“哈希集”。哈希表的定义质量是,哈希函数根据键数据计算数组索引,不同的键倾向于生成不同的索引,从而允许对可能包含键的数组元素进行恒定时间访问。这是一种实现/性能质量,而不是像定义映射那样的功能质量


因此,哈希表存储元素,每个元素不需要由不同的键和值组件组成,但是如果是这样的话,那么它也是一个哈希映射

,hashmap和hashtable之间的解释是非常正确的,因为它也适用于strmap.c中实现的字符串哈希映射的头,其中stringmap是满足键、值结构属性的字符串的哈希表。这里写着:

/*
 *    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;
};
/*
*strmap版本2.0.1
* *ANSI C字符串哈希表。 * *版本历史记录: *1.0.0-初始版本 *2.0.0-将功能前缀从strmap更改为sm,以确保 *ANSI C兼容性 *2.0.1-改进的文档< * *strmap.c * *版权所有(c)2009、2011、2013 Per Ola Kristenson。 * *佩罗拉·克里斯滕森 *物理系推理小组 *剑桥大学 *卡文迪什实验室 *汤姆森大街JJ酒店 *CB3 0HE剑桥大学 *联合王国 * *strmap是免费软件:您可以重新发布和/或修改它 *它是根据GNU Lesser General Public License的条款发布的 *自由软件基金会,或者许可证的第3版,或者 *(由您选择)任何更高版本。 * *分发strmap是希望它会有用, *但无任何保证;甚至没有任何关于 *适销性或适合某一特定目的。见 *GNU Lesser通用公共许可证了解更多详细信息。 * *您应该已经收到GNU Lesser通用公共许可证的副本 *和strmap一起。如果没有,请参阅。 */ #包括“strmap.h” typedef结构对; 类型定义结构桶; 结构对{ 字符*键; 字符*值; };
我的理解是这样的:
哈希表:我们称之为计算机科学中的概念
哈希映射:它在Java中的名称
哈希集(HashSet):我们只关心唯一键的情况(或者你可以把它看作一个哈希表,忽略值,我们只想知道什么是唯一键集)

或者简单地说,
哈希表(CS)=哈希映射(Java)=字典(Python)

Hash Set(CS)=HashSet(Java)=Set(Python)

我仅从数据结构的角度理解Hashmap和Hashtable之间的区别,而不考虑实现它的技术如下:

哈希映射: 是一种更高级别的数据结构,它以键值对的方式组织数据。例:黄页

哈希表:
是一种Hashmap类型,键信息与值直接相关,通常通过使用值作为源应用哈希函数生成,但它不必被视为哈希表。如上所述,在C.中没有标准的哈希表或HASMAP类型,这两个术语通常可以互换使用。我知道C中没有这样的标准哈希表或哈希表。我的意思是在C中编程它的概念时,两者之间有什么区别。与C无关。C没有“HashMap”或“HashTable”的概念。我提到C的原因是,这个问题可能不会被误认为是另一个在java中询问其差异的问题。我看不出lnk如何令人信服它的相似性!我不知道它是如何复制上面提到的链接的。因此,
hashmap
只是一种特殊类型的
哈希表(具有不同的键和值)
。@NickZuber:是的,这是正确的-对我最后一段的合理解释。谢谢你终于成为第一个清楚解释哈希表和h之间区别的人