HashTable
和HashMap
之间的区别仅在于数据结构(而非Java或任何其他语言)。
我见过人们在相同的概念中可以互换使用这些术语。完全没有区别 纯粹在数据结构的上下文 !
答案 0 :(得分:13)
在计算科学术语中,map是从关键字到值的关联容器。换句话说,您可以执行“for key K remember value V”等操作,然后执行“key K get value”操作。映射可以通过多种方式实现 - 例如,使用(可选平衡)二叉树或散列表,甚至是存储键/值的连续结构数组。
哈希表是用于存储任意数据的结构,并且该数据不一定由单独的键和值组成。例如,我可以有一个包含值{1,10,33,97}的哈希表,这将是它们自己的键。当没有与键不同的值时,这有时称为“set”,并且哈希表实现为“哈希集”。
因此,哈希表存储元素,每个元素不需要由不同的键和值组件组成,但如果确实如此,那么也哈希映射。
答案 1 :(得分:0)
散列映射和散列表之间的解释非常正确,因为它也适合在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;
};
答案 2 :(得分:0)
这就是我的理解方式:
哈希表:我们在计算机科学中所谓的概念
哈希图:Java中的名称
哈希集(HashSet):仅关心唯一键的情况(或者您可以将其视为忽略值的哈希表,我们只想知道唯一键集是什么)
或者简单地说,
哈希表(CS)= HashMap(Java)=字典(Python)
哈希集(CS)=哈希集(Java)=集合(Python)
答案 3 :(得分:0)
我仅从数据结构的角度理解 Hashmap 和 Hashtable 之间的区别,不考虑实现它的技术如下:
哈希图: 是一种以键值对方式组织数据的高级数据结构。例如:黄页;
哈希表: 是一种关键信息与值直接相关的 Hashmap 类型,通常通过使用值作为源应用哈希函数生成,但它不一定是为了被视为哈希表。如上所述,具有与值相同的键仍将被视为哈希表。
答案 4 :(得分:-1)
C没有任何内置容器(除了数组),所以由个人实现者决定他们想要什么。就C而言,HashMap与HashTable没有任何实际意义。
一个可能的区别可能在于如何设置后备存储。哈希表可以是键和值的简单线性数组,由哈希索引。散列映射可以是按键排序的平衡树,以及将散列映射到树节点的表,允许快速(O(1))查找和按键顺序遍历数据的能力。
或者它可能是完全不同的东西。同样,C没有任何类型的内置容器用于此类事情,因此这些名称实际上并不意味着C语境中的任何内容。