网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

如何进行HashMap源码分析

这篇文章将为大家详细讲解有关如何进行HashMap源码分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创新互联是一家专注于成都网站建设、网站设计绵阳电信机房的网络公司,有着丰富的建站经验和案例。

代码基于JDK 1.8

基数知识

Map是保存了Key-Value键值对的数据集合接口。HashMap是基于HashCode的Map实现。因为基于Key的HashCode进行存储,所以HashMap中Key都是唯一的。

  • HashMap中Key,Value均可以为null。

源码解析

类声明

1
2
3
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable {
   // ...
}
  • Map - AbstractMap本身实现了Map接口,在这里再次强调了HashMap实现了Map

  • Cloneable 实现了克隆接口

  • Serializable 实现了序列化接口

数据结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* table, 在初次使用时进行初始化, 必要时进行大小调整。
* 在分配大小时,长度总是 2的幂
*/
transient Node[] table;


// Node静态内部类,链表数据结构
static class Node implements Map.Entry {
   final int hash;
   final K key;
   V value;
   Node next;
   Node(int hash, K key, V value, Node next) {
       this.hash = hash;
       this.key = key;
       this.value = value;
       this.next = next;
   }
}

上面代码描述了HashMap的底层数据结构:数组 + 链表

在1.8中,增加了红黑树,带详细研究…

构造函数

对于构造函数,提供了多个重载,以方便创建实例:

1
2
3
4
public HashMap()
public HashMap(int initialCapacity)
public HashMap(int initialCapacity, float loadFactor)
public HashMap(Map m)

在构造函数中,initialCapacityloadFactor两个参数对map的性能有很大的影响。

  • initialCapacity: 初始化大小, 即table数组的长度,如果此值太小,可能会因引起table频繁调整数组大小,如果太大,实际内容很少,则造成资源浪费,默认 1 << 4。

  • loadFactor: 加载因子,取值范围(0,1)的浮点数,如果此值太小,可能会因引起table频繁调整数组大小,如果太大,table大小很长时间不调整,调整时内容移动大。默认值0.75

1
i = (n - 1) & h;

计算key在table中的索引,h为key的hashcode,n为当前table的大小。

HashMap为非线程安全Map,其中key和value均可以为null。

关于如何进行HashMap源码分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


网站名称:如何进行HashMap源码分析
转载来源:http://bjjierui.cn/article/ihjhsp.html

其他资讯