源码解读 001 HashMap

本文深入探讨HashMap的源码,从其继承结构、Map接口、内部接口Entry、位运算符、负载因子、散列表等角度进行解析。分析HashMap如何根据key的hashCode定位节点,并在冲突时形成链表,强调正确实现hashCode和equals方法的重要性。
摘要由CSDN通过智能技术生成

       今天,我们来聊一聊HashMap,看看HashMap的源码是怎么样的?

       HashMap包路径位于Java.util包中。我们跳过package语句和Import语句,从class的定义开始说起。

       我们发现,它继承了AbstractMap类,且实现了三个接口,分别是Map接口,Cloneable接口和Serializable接口。

       Serializable说明它可以被序列化,Cloneable说明其可复制,这两个接口均为标志接口,很简单,我们就不做介绍了。这里,我们先去看一下Map接口。

       首先,Map接口是用泛型来定义的,我们知道,定义Map时,需要分别指明键和值的类型,那么,这里的泛型,就说明了键和值可以是任意一个类型,可以是JDK本身的,也可以是我们自定义的。

       然后,就是定义了一些Map中规定的一些基本的方法,这些方法我们经常也会使用,就不一一介绍了。这里,要说的是,在这个Map接口里,还藏着一个Entry接口。

       一个接口中定义另一个接口,我们称之为内部接口或者嵌套接口。这种方式我们好像并不是很常用或者常见,那么,我们就先来分析下,为什么这里要使用内部接口?

       我们可以把内部接口和内部类作比较。我们知道,内部类是指在一个类的内部定义的另外一个类。内部类可以被认为是一个外部类内部定义的一个常规方法,这个方法可以是静态的,也可以是非静态的。静态内部类类似于静态方法,它只能访问外部类的静态成员属性,非静态方法可以访问外部类的所有成员属性。

       那么,对于接口来说,因为接口是不能被实例化的,所以,如果一个内部接口是非静态的,那么,它是没有什么意义的。所以,默认情况下,内部接口是静态的,无论你是否手动加了static关键字。

       好,说到这儿,你是不是发现更加懵逼了?不急,我们先搞清楚一个也许也是之前不常用也不曾思考过的问题,那就是,static修饰类或者接口的时候,有什么意义?</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值