文章目录
HashMap和HashTable的区别
HashMap没有被Synchronized修饰,线程不安全
HashTable被Synchronized修饰,线程安全
HashMap中的Key和Value可以为null,存在于数组中下标为0的位置,HashTable不可以
HashMap在JDK1.8之后的实现原理
底层是通过数组+链表+红黑树实现的
当存入一个元素时,会对key进行二次Hash求出该key对应的数组下标
如果当前下标没元素,直接添加在该处,如果有元素的话会调用equals()比较这两个值到底是否相等,
如果相等,直接覆盖.如果不相等的话,会存入该位置对应的链表(如果链表长度大于8,并且数组长度大于64,会将链表转换为红黑树,当长度小于6时,会转成链表)
ConcurrentHashMap是线程安全的HashMap,相比HashTable来说,这个效率更高.因为HashTable是全局锁,会把每一个方法都锁起来,而ConcurrentHashMap是分段锁.