java多线程面试题(三)-----HashTable,HashMap,ConcurrentHashMap

一.HashTable和HashMap

Hashtable是JAVA中依靠哈希表来实现的,学习数据结构的时候我们已经知道哈希表是基于数组加链表去实现的。哈希表最重要的是扩容机制和哈希冲突,当负载因子大于0.75时会触发扩容机制。哈希冲突是多个数通过哈希函数映射到同一位置。为了解决哈希冲突会在数组上挂一个链表,往链表上去插入元素。HashMap底层是依靠这种原理来实现的,是数组加链表加红黑树。而TreeMap底层是一颗二叉搜索树,HashMap增删查改的时间复杂度都为o(1),但HashMap和TreeMap是线程不安全的,在多线程的场景下会产生线程安全问题,java中的HashTable是线程安全的。

二.HashTable

Vector和HashTable属于java很早之前的集合,HashTable给每个方法加了锁,加了锁不一定线程安全,不加锁也不一定线程不安全。
在这里插入图片描述
在这里插入图片描述
虽然HashTable给每个方法加了锁,但是如果添加元素的同时删除元素,这2个操作整体不是原子性的,在多线程的情况下执行结果可能发生错误。所以vector/ HashTable这样的集合类,虽然加了synchronized也不能保证一定线程安全,同时在单线程的情况下,可能因为加锁影响效率。
HashTable是给方法加了锁,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值