欢迎来到天天文库
浏览记录
ID:14388123
大小:140.50 KB
页数:8页
时间:2018-07-28
《java jdk1.8 hashmap源码阅读笔记(一)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、JavaJdk1.8HashMap源码阅读笔记(一)一、结构publicclassHashMapextendsAbstractMapimplementsMap,Cloneable,Serializable1、抽象类AbstractMappublicabstractclassAbstractMapimplementsMap一、结构publicclassHashMapextendsAbstractMapimplementsMap,Cloneable,Serializable1、抽象类Abstract
2、MappublicabstractclassAbstractMapimplemen该类代码很简单,不再赘述。2、序列化接口:Serializable该接口没有什么好说的,但通过该接口,就解释了为什么HashMap总一些字段是用transient来修饰。一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。二、阅读JDK中类注释1、HashMap是无序的如果希望保持元素的输入顺序应该使用LinkedHashMap2、除了非同步和允许使用null之外,HashMap与Hashtable基本一致。此处的非同步指的是多线程访问
3、,并至少一个线程修改HashMap结构。结构修改包括任何新增、删除映射,但仅仅修改HashMap中已存在项值得操作不属于结构修改。3、初始容量与加载因子是影响HashMap的两个重要因素。publicHashMap(intinitialCapacity,floatloadFactor)初始容量默认值:/***Thedefaultinitialcapacity-MUSTbeapoweroftwo.*/staticfinalintDEFAULT_INITIAL_CAPACITY=1<<4;//aka16加载因子默认值:/***Theloadfactorusedwhennones
4、pecifiedinconstructor.*/staticfinalfloatDEFAULT_LOAD_FACTOR=0.75f;容量是HashMap在创建时“桶”的数量,而初始容量是哈希表在创建时分配的空间大小。加载因子是哈希表在其容量自动增加时能达到多满的衡量尺度(比如默认为0.75,即桶中数据达到3/4就不能再放数据了)。默认0.75这是时间和空间成本上一种折衷:增大负载因子可以减少Hash表(就是那个Entry数组)所占用的内存空间,但会增加查询数据的时间开销,而查询是最频繁的的操作(HashMap的get()与put()方法都要用到查询);减小负载因子会提高数据
5、查询的性能,但会增加Hash表所占用的内存空间。。4、存储形式(树形存储在treemap中再探讨)链表形式存储?树形结构?*Thismapusuallyactsasabinned(bucketed)hashtable,but*whenbinsgettoolarge,theyaretransformedintobinsof*TreeNodes,eachstructuredsimilarlytothosein*java.util.TreeMap.Mostmethodstrytousenormalbins,but*relaytoTreeNodemethodswhenapplica
6、ble(simplybychecking*instanceofanode).三、源码阅读1、添加元素/***Associatesthespecifiedvaluewiththespecifiedkeyinthismap.*Ifthemappreviouslycontainedamappingforthekey,theold*valueisreplaced.**@paramkeykeywithwhichthespecifiedvalueistobeassociated*@paramvaluevaluetobeassociatedwiththespecifiedkey*@ret
7、urnthepreviousvalueassociatedwithkey,or*nulliftherewasnomappingforkey.*(Anullreturncanalsoindicatethatthemap*previouslyassociatednullwithkey.)*/publicVput(Kkey,Vvalue){returnputVal(hash(key),key,value,false
此文档下载收益归作者所有