HashMap、HashTable和ConcurrentHashMap

本文对比分析了HashMap、HashTable和ConcurrentHashMap的区别。HashMap是非线程安全的,允许null值,线程不安全可能导致数据不一致;HashTable线程安全但效率较低,不支持null值;ConcurrentHashMap采用分段锁技术,提供高效并发访问,推荐在高并发场景下使用。
摘要由CSDN通过智能技术生成

一、HashMap

实现了Map接口,并且允许null values和null keys,并不能保证map的顺序会不变,因为如果这个map rebuild以后就会发生变化。

判断key是否存在
因为HashMap中key和value都可以为null,所以不能通过get()为null来断定key不存在,也可能是key本身为null。应该用containsKey()来判断

快速访问
对于get和put都是常数时间,迭代的时间和实例的容量(桶数量)以及大小(映射对的数量)成正比。
一个HashMap实例有initial capacity(初始容量)和load factor(加载因子)会影响性能。
capacity: 哈希表中桶的数量,默认是16
*load factor:*允许一个hash table可以被允许有多少被占用。目的使降低hash冲突的
如果entries超过了load factor *capacity 就需要rehash 哈希表,capacity就会扩大到原来的两倍。

0.75的load factor时间和空间消耗都比较少,load factor大,会增加空间存储,但是也会增加查找的时间

线程不安全:
如果多线程并发访问hash map,并且至少有一个线程结构上修改了map,必须要在hash map外部进行同步操作。(结构上:是指增加或者删除了mappings,仅仅是改变了value并不算结构上的改变)

那么外部实现同步操作通常是在封装了这个map的对象里完成。如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值