
hashmap
一页知秋否
男人就不应该生活的太安逸
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HashSet如何避免存储重复元素(工作原理)
为了一探究竟我建议先上源码(以set的add方法为例)如下所示:原理hashSet底层是基于HashMap 来实现存储的,而set的 add方法其实调用的是map的put方法:继续探究map的put方法看其实如何实现存储不重复元素的 :可以看到在遍历table中的元素判断键和值,1,如果hash码值不相同,说明是一个新元素,存储;如果没有元素和传入对象(也就是add的元素)的hash值相等,那么...原创 2018-04-25 11:07:55 · 4806 阅读 · 1 评论 -
ConcurrentHashMap1.7和1.8的不同实现
ConcurrentHashMap在多线程环境下,使用HashMap进行put操作时存在丢失数据的情况,为了避免这种bug的隐患,强烈建议使用ConcurrentHashMap代替HashMap,为了对ConcurrentHashMap有更深入的了解,本文将对ConcurrentHashMap1.7和1.8的不同实现进行分析。1.7实现数据结构jdk1.7中采用Segment + ...转载 2019-01-17 09:11:30 · 302 阅读 · 0 评论 -
深入分析ConcurrentHashMap1.8的扩容实现
什么情况会触发扩容当往hashMap中成功插入一个key/value节点时,有可能触发扩容动作:1、如果新增节点之后,所在链表的元素个数达到了阈值 8,则会调用treeifyBin方法把链表转换成红黑树,不过在结构转换之前,会对数组长度进行判断,实现如下:如果数组长度n小于阈值MIN_TREEIFY_CAPACITY,默认是64,则会调用tryPresize方法把数组长度扩大到原来的...转载 2019-01-17 09:16:53 · 935 阅读 · 0 评论 -
ConcurrentHashMap 与 CAS
在做接口限流时涉及到了一个有意思问题,牵扯出了关于concurrentHashMap的一些用法,以及CAS的一些概念。限流算法很多,我主要就以最简单的计数器法来做引。先抽象化一下需求:统计每个接口访问的次数。一个接口对应一个url,也就是一个字符串,每调用一次对其进行加一处理。可能出现的问题主要有三个:多线程访问,需要选择合适的并发容器 分布式下多个实例统计接口流量需要共享内存 流量统计应...转载 2019-01-17 09:22:22 · 4946 阅读 · 0 评论 -
HashMap引发死循环及元素丢失情景分析
公司项目的一个模块在线上运行的时候出现了死循环,死循环的代码就卡在HashMap的get方法上。尽管最终发现不是因为HashMap导致的,但却让我重视了HashMap在多线程环境下会引发死循环的这个问题,下面先用一段代码简单模拟出HashMap的死循环: 1 2 3 4 5 6 7 8 9 10 11 ...转载 2019-01-17 09:30:08 · 479 阅读 · 0 评论