android开发java容器类HashMap源码原理分析

  次阅读 来源:互联网(转载协议) 2016-01-19 12:41 我要评论(0)

1.HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

2. HashMap的数据结构:在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap 也不例外。HashMap实际上是一个 链表散列 的数据结构,即数组和链表的结合体。 java 容器类研究一:HashMap源码原理分析 - 初学者 - 初学者的博客从上图中可以看出,HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。 3 .HashMap成员变量 //默认初始容量,总为2的次方值

static final int DEFAULT_INITIAL_CAPACITY = 16;

//最大容量

static final int MAXIMUM_CAPACITY = 1 << 30;

//默认加载因子

static final float DEFAULT_LOAD_FACTOR = 0.75f;

//Entry数组,每一个Entry是一个键值对实体

transient Entry[] table;

//实际存的Entry个数

transient int size;

//数组扩容的阀值,当size+1 > threshold时,扩充到以前容量的两倍

//threshold = table.length * loadFactor

int threshold;

//负载比率

final float loadFactor;

//Map结构一旦变化,如put remove clear等操作的时候,modCount随之变化

transient volatile int modCount;

可以看出,Entry就是数组中的元素,每个 Map.Entry 其实就是一个key-value对,它持有一个指向下一个元素的引用,这就构成了链表。

四.Entry对象

//很简单的一个键值对实体而已

static class Entry implements Map.Entry {

final K key; //key

V value; //value

Entry next; //next Entry

final int hash; //计算出key的hash值

/**

* Creates new entry.

*/

Entry(int h, K k, V v, Entry<K,V> n) {

value = v;

next = n;

key = k;

hash = h;

}

.....

}

五.构造函数

// 构造函数

public HashMap(int initialCapacity, float loadFactor) {

if (initialCapacity < 0)

throw new IllegalArgumentException("Illegal initial capacity: "

+ initialCapacity);

if (initialCapacity > MAXIMUM_CAPACITY)

initialCapacity = MAXIMUM_CAPACITY;

if (loadFactor <= 0 || Float.isNaN(loadFactor))

throw new IllegalArgumentException("Illegal load factor: "

+ loadFactor);

// 将传入的initialCapacity值,转变成2的次方值capacity去实例化hashmap的属性

// 比喻传入initialCapacity = 100,则算出来capacity = 2 << 7 = 128,

// 最终threshold = 128 * 0.75 = 96,table = new Entry[128]

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 长虹新款智能语音空调,告诉你空调也能玩Siri

    长虹新款智能语音空调,告诉你空调也能玩Siri

  • 让AI触手可及  Qualcomm携手创通联达推出全新终端侧AI开发套件

    让AI触手可及 Qualcomm携手创通联达推出全新终端侧AI开发套件

  • 品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

    品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

  • 第一批国家重点研发计划公布,旷视科技开启“五年行动”

    第一批国家重点研发计划公布,旷视科技开启“五年行动”

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...