浅谈hashmap 以及其与hashtable,currenthashmap区别

来源:互联网 发布:linux开机启动流程图 编辑:程序博客网 时间:2024/06/03 18:09
首先我们来简单解析一下hashmap,java中使用hashcode,与equlse方法判断元素是否重复,,,首先将key通过hash算法算成索引值,然后判断该索引值对应的内存里是否有东西,没有就存进去,有再用equlse比较相同则替换,不同就生成链表,这是Java1.7及一下的用法。。。

我们来看看1.8,如果该链表过大在查询的时候就会在建表中一个一个去equlse,java8中当链表大于一定长度就会将其转化为红黑树,这样使得其查询快,不过增删比链表慢。。。

下面我们来看看他们三个的区别:

HashMap:每个隔间都没锁门,有人想上厕所,管理员指给他一个隔间,里面没人的话正常用,里面有人的话把这个人赶出来然后用。
优点,每个人进来不耽误都能用;缺点,每一个上厕所的人都有被中途赶出来的危险。


Hashtable:在卫生间外面安装一个大门,有人想上厕所,问管理员要一个钥匙进门,把门反锁用,用完后出来,把钥匙交换给管理员。在这个人上厕所期间,其他所有人都必须在外面排号。
优点,每个人都能安心上完厕所;缺点,卫生间外面可能已经出了人命。 =_=

ConcurrentHashMap:在卫生间每个隔间安装门锁,有人想上厕所,管理员指给他一个隔间,进来后这个隔间如果没人在用则直接用,如果有人正在用,则排号。在这期间其他人会按规则分到不同的隔间,重复上述行为。
优点:每个人都能安心上厕所,外面排队的也被均匀分摊。缺点:。。。



原创粉丝点击