Hash底层源码分析

来源:互联网 发布:超级玛丽安卓源码 编辑:程序博客网 时间:2024/05/18 12:36


    Hsah:散列将一个任意长度通过某种(函数函数算法)转换成一个固定值,通过hash出来的值,通过只定位到map,key-value 基本原理。


/**

 * Hashtable是基于Map接口的实现。这个版本的实现提供了所有map操作的实现并且允许null值和null键

 * 除了允许空值(null)和不支持同步,HashMap和hashtable没有什么区别

 * HashMap不保证有序,尤其是不保证顺序随时间不变

 * 该实现提供常数时间的get、put操作,假设hash函数使元素均匀分布在bucket中。

 * 

 *一个HashMap实例有两个参数会影响性能:初始容量(initialcapacity)和装载因子(load factor)

 *capacity是hashtable的桶数目,初始容量仅仅只是创建时的容量

 *装载因子是衡量哈希表自动增长前装满的程度

 *当哈希表中键值对的数目超出容量与装载因子之积,哈希表就会重新哈希(rehashed)(即,内部数据结构会重建)为之前容量的两倍

 * 

 *通常,默认的装载因子0.75可以在时间和空间之间有很好的权衡,想避免重新hash的时间开销,可以设置比较大的初始容量

 *太多关键字的hashCode()相同也会导致性能下降,HashMap实现使用关键字之间的比较顺序来平衡

 * 

 *要特别注意HashMap实现不支持同步。如果有多个线程同步访问一个HashMap,并且一个以上的线程会修改HashMap结构,则需要外部同步;(结构修改是指添加或移除键值对,仅仅修改value值不是结构修改操作)

 *如果没有这样的对象,map需要由Collections.synchronizedMap()方法包装 ,而且最好在Map创建时完成,以防意外的非同步访问

 * 非同步访问map:<pre>

 *   Mapm = Collections.synchronizedMap(new HashMap(...));</pre>

 *

 *HashMap类所有集合视图返回的迭代器都是“fail-fast”:迭代器创建之后修改map结构,除了使用迭代器自己的remove方法,其他都会抛出ConcurrentModificationException异常

 * 但这种行为也不能保证同步不出错

 */  


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 碰到蛇怎么办 扁桃体发脓怎么办 毛血管破裂怎么办 血管破裂怎么办 毛细血管扩张怎么办 血管堵塞该怎么办 鼻子出油怎么办 鼻子出油很厉害怎么办 油性皮肤起皮怎么办 佰草集面膜过敏怎么办 用佰草集过敏怎么办 睡眠时间短怎么办 不能深度睡眠怎么办 睡眠面膜搓出泥怎么办 螺杆组合下不掉怎么办 有抬头纹怎么办 20岁就有抬头纹怎么办 瓷砖地板沁冒水怎么办 芒果皮肤过敏怎么办 脸上很干燥怎么办 脸部干燥粗糙怎么办 脸部肌肤干燥怎么办 脸皮肤干燥怎么办 脸部皮肤干燥怎么办啊? 新生婴儿上火怎么办 三个月婴儿上火怎么办 断奶不吃奶粉怎么办 孩子有黑眼圈怎么办 孩子黑眼圈怎么办 小孩子黑眼圈怎么办 小孩有黑眼圈怎么办 敷面膜过敏怎么办? 面膜皮肤过敏怎么办 面膜敷过敏怎么办 一体机进水了怎么办 甲方终止合同怎么办 皮肤不细腻怎么办 脸部衰老怎么办 电脑辐射斑怎么办 电脑辐射皮肤怎么办 血管内有斑块怎么办