简述HashMap的特点

简述HashMap的特点

一、HashMap是查询效率最高的数据结构。

二、HashMap的内部是使用数组来存储元素的,元素存放的位置是依据key值的hashcode()方法的返回值经散列算法,生成的下标数字来决定的。所以查询元素时,HashMap会依靠给定的key的hashcode()方法返回值来计算出对应的下标,然后直接通过下标去访问相应的元素,这样就省去了遍历数组的过程。HashMap查询数据时不受元素数量的影响。

三、由于Map的key的唯一性(key的equals()方法比较来决定是否重复),那么在存放多组元素时可能会出现两个key经hashcode()方法返回值再通过散列算法计算后所得下标值一样的情况。那么此时HashMap会根据key的equals()方法比较两个key是否相等,若相等则替换value值,若不相等则会以链表的形式保存这两组键值对(链表的出现会影响查询性能)。

四、在HashMap中链表的出现会影响查询性能,因为可能会存在需要遍历链表的情况,二作为key元素的hashcode()方法与equals()方法直接决定是否会产生链表。

五、当两个key的hashcode()方法返回值相同(在HashMap内部数组下标就相同),若key的equals()比较不同则会出现链表。

六、关于equals()方法和hashcode()方法的重写

       对于java提供的类,我们无需关注他们的重写,一定是符合要求的,但是对于我们自定义的类,若要重写这两个方法时,需要遵循以下要求:

      1、两个方法要成对重写,即:当我们需要重写一个类的equals()方法时,也要重写hashcode()方法;

      2、一致性:当两个对象equals()比较结果为true时,hashcode()方法返回值必须相等,反之亦然。虽然并非要求hashcode()值相等时equals()比较必须为true,但若不是这样,这两个对象作为key存入HashMap时就会产生链表。(hashcode()返回值直接决定了这个对象在Map数组中存放的位置)。

     3、稳定性:当一个对象参数equals()比较的属性没有发生过改变的前提下,每次调用hashcode()方法返回的值应当不变。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值