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!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

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

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...