最好是有对比 Python 的 dict,有什么异同。
还是说 java 的 HashMap 和 Python 的 dict 在用法上除了 api 不同外,本质上完全一样?
1
ethanSong 2020-08-14 17:09:25 +08:00 1
近期也看了不少关于 HashMap 的文章,发现都是讲 HashMap 源码实现流程的,后面学习了下数据结构的哈希查找,了解到什么是哈希函数,再回想到 HashMap 的本质其实是为了更好的查找,查找效率比着顺序查找,折半查找在使用场景和效率上都有很大的优势。你可以看看散列表和哈希查找,然后就可以比较深入的了解到 HashMap 的为什么这么设计了。个人见解。
|
2
chihiro2014 2020-08-14 20:14:58 +08:00 1
https://www.bilibili.com/video/BV1Qt4y117XJ
可以看这个,和 Java 的 hashmap 结合讲解 |
3
BoarBoar 2020-08-14 20:15:50 +08:00
老铁你这基础不太好啊,哈希表是数据结构,和语言无关。不管什么语言只是实现并把常用操作做了封装而已,最多就是一些细节有差别,比如解决哈希冲突的方法。
至于怎么实现的,直接去看源码不就是最好的,何必要看博客二手货。书籍我只知道严蔚敏的算法与数据结构。。大学学的,哈希表在工作中又很常用,想忘都难 |
4
aguesuka 2020-08-15 11:46:34 +08:00 via Android
什么都比不上自己做一个。自己去做的时候就会发现,很多没人提到的细节。比如 jdk8 的最坏时情况不是退化成红黑树,而是红黑树再退化成链表
|
5
aguesuka 2020-08-15 11:48:00 +08:00 via Android 1
主贴问题的答案应该是处理 hash 碰撞的方法不一样
|
6
oahebky OP |
7
chen006 2020-08-15 13:41:23 +08:00 via Android
算法十分熟悉,代码水平过关也挺难十几分钟就造一个轮子出来的,有点耐心好不好
|
8
oahebky OP @chen006
不是指造一个标准库水平的通用轮子。 而是指根据实际问题,结合数据结构特性(如 hashset )造轮子(不借助标准库)来用。 比如 leetcode 的 design hashset 一题,限定了输入是 int 型取值 [ 1,1000000 ]。 比如遇到大量整型输入,但是取值限于 [ 300,400 ]之间,可以通过简单的取模实现。 > 像检查一个字符串( a-z )中的字符是否全部在另一个字符串( a-z )中存在的问题,可以建一个 26 长度的桶,简单取模就能实现 hashset,不用借助标准库。 当然,通用的 hashmap 更复杂。 不过主要道理是这个理。 所以才有这个帖子问问有没有人看到过这方面比较好的学习资料。 比如有没有博客可能介绍了不同的 hash 算法,将在大神论文中的 hash 算法通过博客或书籍或视频揉碎了讲,甚至可能结合实际场景应用不同的 hash 算法造个 hashset/hashmap 的轮子。 当然,就实际通用的实现,用链表、二叉树、等等实现的,经过重复雕琢过的代码更精炼,学起来比自己实现一遍效率应该更高;但是这个数据结构直接看源码有点作死,所以想问问有没有博客或书籍或视频啥的把源码揉碎了讲的。 大致上就是如此,总的来说就是想问问有没有好学好理解的材料; 只看原理当然不可能很快写个轮子, 但是结合重复雕琢过的代码学过了,效果会很不一样。 |
9
xiaolinjia 2020-09-22 10:57:27 +08:00 1
https://mp.weixin.qq.com/s/WoGBUmISco60LQOoivB1QA
前几天看到一篇这样的文章。 |
10
oahebky OP |