首页 理论教育 Java服务端研发-Map的原理和实现

Java服务端研发-Map的原理和实现

时间:2023-11-22 理论教育 版权反馈
【摘要】:Map是通过键值对存储的,可以通过键来获取值。HashMap是最常用的Map,本节以它为例讲解Map的原理和实现。HashMap通过散列的形式,以达到快速存取和空间控制的目的。以手机号为例,用手机号对10000取余,那么所有手机号就散列了10000个分组,分别是从0到9999,这种散列的基础就是hashCode方法。这就是作为HashMap的Key值的类为什么必须实现hashCode和equals这两个方法的原因,见表1-7。代码中提供了几种遍历HashMap的方法,包含全量遍历HashMap、只遍历Key和只遍历Value。

Java服务端研发-Map的原理和实现

Map是通过键值对存储的,可以通过键来获取值。HashMap是最常用的Map,本节以它为例讲解Map的原理和实现。HashMap通过散列的形式,以达到快速存取和空间控制的目的。以手机号为例,用手机号对10000取余,那么所有手机号就散列了10000个分组,分别是从0到9999,这种散列的基础就是hashCode方法。散列后手机号映射到的分组值会重复,要把这些散列后重复的数据保存到某一分组中就用到了链表,在链表中要正确地取值就需要equals方法作为对象的比较依据。这就是作为HashMap的Key值的类为什么必须实现hashCode和equals这两个方法的原因,见表1-7。

1-7 散列情况

978-7-111-61011-3-Part01-69.jpg

代码如下:

978-7-111-61011-3-Part01-70.jpg

运行结果如下:

{id=1 name=xiaoming=Musician,id=2 name=daming=Scientist,id=3 name=xiaobai=Astronaut}

key=id=1 name=xiaoming value=Musician

key=id=2 name=daming value=Scientist

key=id=3 name=xiaobai value=Astronaut

id=1 name=xiaoming(www.xing528.com)

id=2 name=daming

id=3 name=xiaobai

Musician

Scientist

Astronaut

key=id=1 name=xiaoming value=Musician

key=id=2 name=daming value=Scientist

key=id=3 name=xiaobai value=Astronaut

在上面的例子中,构建了一个HashMap,key值是之前经常使用的Person类对象,当然可以构建key值是基本类型包装器类的对象,具体使用什么作为Key需要在实际项目中进行判断,这里仅作为演示。代码中提供了几种遍历HashMap的方法,包含全量遍历HashMap、只遍历Key和只遍历Value。一些其他方法这里就不过多介绍,读者可查看相关文档进行了解。

本节已经演示了常用容器的使用方法并介绍了容器的不同特性,在实际的项目中需要根据业务的要求和容器的特性选择合适的容器。容器性能问题一般不会对业务造成太多困扰,除非特殊的业务逻辑,一般都不会遇到容器性能瓶颈。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈