java-tip-HashMap

HashMap的基本查找过程:
先使用key.hashCode()生成哈希值,根据哈希值来确定key存放的位置
找到key在数组中的位置后,再使用key.equals()方法来找到指定的key。

 

1. 自定义的对象需要满足什么条件才能作为HashMap的Key?
    想要作为HashMap的Key必须满足两个条件:
   1)  重写hashCode()方法,一个对象的hashCode()决定对象在Hash表中存放的位置
       注:Object的hashCode()方法是根据对象的地址计算的。
   2)  重写equals()方法,equals()方法决定Hash表中是否存在这个对象
       注:Object的equals()方法只是比较地址
2. 关于android平台HashMap的装载因子和扩容
HashMap虽然提供了一个可以指定装载因子的构造函数, 但是在实际的实现中并没有使用这个参数
它的装载因子总是0.75f

 

如果实际中key数量过多,会导致碰撞的hash变多,从而影响查找效率。
当size > capacity * 装载因子 时,HashMap会进行扩容。

 

HashMap的扩容步骤如下:
1. 申请新的数组,大小为旧的两倍
2. rehash -> 将现有的item放到新的hash表中

 

HashMap的扩容是个比较耗时的操作,因此,
我们在使用HashMap的时候,尽可能指定合适的Capacity以避免扩容。

转载于:https://www.cnblogs.com/hdtianfu/p/5225825.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值