首页 > 其他 > 详细

hashmap

时间:2019-10-09 21:04:46      阅读:96      评论:0      收藏:0      [点我收藏+]

hashmap

1 Map接口

JAVA提供的JAVA.util.Map接口下有四个实现类 hashmap treemap  hashtable linkedhashmap. 分别如下。

hashmap  ,根据键值的hashcode存储数据,具有随机性。

               最多允许一个键值为null,可以允许多个value为null。

                多个线程同时写可能会导致数据不一致。可以使用                      collections. synchronizedmap,和             concurrenthashmap实现线程安全。

treemap  实现了sortedmap接口,把保存的记录根据键值进行默认的升序排序,也可自定义为降序。当用iterator进行遍历时,得到的结果是根据键值进行排序的。

linkedhashmap 。hashmap的一个子类,是根据插入的顺序进行排序的。

hashtable 是遗留类,线程安全,使用synchronized关键字进行同步。不建议使用,可用concurrenthashmap(使用分段锁)代替。

2 hashmap的原理

在JAVA1.7中底部是数组加链表。数组是桶table,根据index=hashcode(key)&(table.length-1),当发生键值冲突的时候,采用链地址法。采用头节点插入法。index所处值为空时,将当前值作为链表的头节点。在jdk1.8中,当链表的长度大于八的时候,会转换为红黑树。当table数组长度不足时,会进行扩容操作。当红黑树长度低于六的时候会转换为链表。

红黑树

根节点和叶子结点都是黑色的

红色节点的子节点一定是黑色节点

任何一节点到叶子节点的黑色节点个数都一样。

 

hashmap

原文:https://www.cnblogs.com/bowenqianngzhibushiwo/p/11644124.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!