HashMapHashTable面试深入
面试官:你了解集合吗?
lz:了解呀!
面试官:说说HashMap、HashTable有什么不同?
lz:首先最大的不同就是HashMap线程不安全,效率高、HashTable线程安全,效率低,还有HashMap允许k、v为null,HashTable不允许
面试官:HashTable为什么是线程安全的?
lz:因为HashTable内部为所有的操作都加了同步锁(synchronized)
面试官:为什么加了synchronized锁会导致效率降低?
lz:因为加了同步锁(synchronized)其他线程再想访问的话,必须等到前一个线程释放了锁才能使用。比如十个线程,只能一个一个排队等候执行,所以效率会降低。
面试官:我们公司有些大数据量等需要用到HashTable,但又想保证执行效率,怎么办?还有其他可用的集合吗?
lz:有啊ConcurrentHashMap。
面试官:ConcurrentHashMap是如何保证线程安全的?
lz:因为使用了分段锁segment。
面试官:为什么分段锁比同步锁效率高?
lz:分段锁就是把Map分成了多个segment去处理,进行put操作时,根据hashcode找到相应的锁,彼此之间不受影响,所以效率高。而同步锁--锁住的是整个HashTable,因此效率会低。
面试官:知道HashMap的实现原理吗?了解hash碰撞吗?
lz:HashMap是一个数组+链表的数据结构。采用hashing原理,在进行put 操作时根据Key计算出它的hashcode,根据hashcode找到相应的桶的位置。在进行get 时也是根据hashcode 找到相应位置的数据的。当发生hash碰撞时,即hashcode相同。那么会在相应的桶中形成一个链表结构进行存储。

浙公网安备 33010602011771号