面试题, hash 和 map 的区别???

2018-09-28 11:09:01 +08:00
 zwpaper

刷到 v2 在讨论鹅厂的技术水平
https://www.v2ex.com/t/492998?p=1

刚好昨天面试,和鹅厂面试官聊了一下,有个问题耿耿于怀,想来 v2 学习一下

问题就是标题,hash 和 map 的区别

我第一反应是这俩不是一个对比范畴的吧,hash 是算法,map 是数据结构?和面试官提了一嘴,貌似不能这么对比吧?

然后想起来 c++ 中 map 是用红黑树实现的,又问了一下,是讨论 c++ 吗?回答是不是,就是讨论数据结构……

没办法,强行回答,hash 一般是用数组实现,O(1),map 是用树,O(log n)

---
### 事后搜索

map
> In computer science, an associative array, map, symbol table, or dictionary is an abstract data type composed of a collection of (key, value) pairs, such that each possible key appears at most once in the collection.

hash 有两个结果
hash function

这是我理解的 hash 函数

> A hash function is any function that can be used to map data of arbitrary size to data of a fixed size.


hash table

hash 表,我理解这是不是也是一种 map ?

> In computing, a hash table (hash map) is a data structure that implements an associative array abstract data type, a structure that can map keys to values. A hash table uses a hash function to compute an index into an array of buckets or slots, from which the desired value can be found.



---
### 最后

就算 c++ 里,std 里的 hash 是 c++11 加进去的函数模版
最常用的 hash 数据结构是 unordered_map ……


来 v2 学习一下我考虑的不周的地方

4726 次点击
所在节点    程序员
15 条回复
enenaaa
2018-09-28 12:12:23 +08:00
人家问的是 hash table 和 map 对比吧。 这不是面试常识?
0x11901
2018-09-28 12:25:07 +08:00
其实我觉得楼主答得不错,知识面也挺广的……
面试官应该就如楼上所说就想问问红黑树实现的 map 和哈希表实现的 hash_map 区别……
congeec
2018-09-28 12:25:58 +08:00
面试不是把问题答出来就行。多沟通,弄清人家的意图,掌握主动权啊
leotso
2018-09-28 12:34:55 +08:00
@congeec 嗯,有道理,越来越觉得面试中的沟通很重要
seeker
2018-09-28 12:38:36 +08:00
根据楼主的描述,是面试官沟通能力欠佳,或者是不愿沟通。
across
2018-09-28 12:54:43 +08:00
感觉面试 unordered_map 和 map 成必考题了
zwpaper
2018-09-28 13:04:04 +08:00
@enenaaa 我理解的 hash table 也是 map 的一种吧,毕竟 hash table 也叫 hash map ……
zwpaper
2018-09-28 13:08:40 +08:00
@congeec 有沟通的,没写太细致,聊完 hash table 和树的区别,面试官也认可了,只是我还是觉得不应该把 map 单一地认为就是树
fireapp
2018-09-28 13:10:59 +08:00
hash 是算法,map 是数据结构
wingyiu
2018-09-28 13:13:22 +08:00
java: Map HashMap TreeMap
kx5d62Jn1J9MjoXP
2018-09-28 13:13:57 +08:00
hash 可以实现 map, 但是 map 有其它类型的, 比如 TreeMap
zwpaper
2018-09-28 13:14:12 +08:00
@across 主要我面的是非 c++ 岗,考我 unordered_map 真可能把我考住的…而且面试官强调的是通用的 map,非 c++。

而且,作为一名 gopher,map 是 hash table 实现的…真差点尴尬了
ChristopherWu
2018-09-28 13:16:45 +08:00
@zwpaper 除了 C++, python 也是有 OrderedDict 的,也是有序 map。

怎么说呢,知道 map 有『有序』与『无序』两种不同的实现方式,也是挺重要的。
d18
2018-09-28 13:46:18 +08:00
hash 特指哈希表?
map 的话,tree 和 hash 是常见的实现方式,但是单从字面理解,只要是实现了 mapping 的功能就行,甚至可以是比如一个数组,然后分别用连续两个元素保存键值对。
20015jjw
2018-09-29 00:45:40 +08:00
奇怪的题目..

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/493449

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX