什么情况用hashMap

2020-06-01  本文已影响0人  LeslieAlex

HashMap是基于Map接口的实现,在存储键值对时使用HashMap。
特点:
1.使用HashMap定义的Map集合,是无序存放的(顺序无用);
2.元素(key)不能重复,如果发现了重复的key,会进行覆盖,使用新的内容替换旧的内容;
3.使用HashMap子类保存数据时,key或value可以保存为null。
4.HashMap是异步的,线程不安全。

为什么线程不安全
HashMap 在并发时可能出现的问题主要是两方面:

如果多个线程同时使用 put 方法添加元素,而且假设正好存在两个 put 的 key 发生了碰撞(根据 hash 值计算的 bucket 一样),那么根据 HashMap 的实现,这两个 key 会添加到数组的同一个位置,这样最终就会发生其中一个线程 put 的数据被覆盖

如果多个线程同时检测到元素个数超过数组大小 * loadFactor,这样就会发生多个线程同时对 Node 数组进行扩容,都在重新计算元素位置以及复制数据,但是最终只有一个线程扩容后的数组会赋给 table,也就是说其他线程的都会丢失,并且各自线程 put 的数据也丢失

上一篇 下一篇

猜你喜欢

热点阅读