Hash底层源码分析


    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
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值