HashMap详解(通俗易懂).doc

HashMap详解(通俗易懂).doc

ID:62033409

大小:70.00 KB

页数:6页

时间:2021-04-15

HashMap详解(通俗易懂).doc_第1页
HashMap详解(通俗易懂).doc_第2页
HashMap详解(通俗易懂).doc_第3页
HashMap详解(通俗易懂).doc_第4页
HashMap详解(通俗易懂).doc_第5页
资源描述:

《HashMap详解(通俗易懂).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、java中HashMap详解    HashMap和HashSet是JavaCollectionFramework的两个重要成员,其中HashMap是Map 接口的常用实现类,HashSet是Set 接口的常用实现类。虽然HashMap和HashSet 实现的接口规范不同,但它们底层的 Hash存储机制完全一样,甚至HashSet本身就采用 HashMap来实现的。通过 HashMap、HashSet 的源代码分析其Hash存储机制ﻫ实际上,HashSet 和 HashMap之间有很多相似之处,对于HashSet

2、而言,系统采用Hash算法决定集合元素的存储位置,这样可以保证能快速存、取集合元素;对于HashMap而言,系统 key-value当成一个整体进行处理,系统总是根据Hash算法来计算 key—value 的存储位置,这样可以保证能快速存、取Map的 key-value对。ﻫ在介绍集合存储之前需要指出一点:虽然集合号称存储的是Java对象,但实际上并不会真正将Java对象放入 Set集合中,只是在Set集合中保留这些对象的引用而言。也就是说:Java集合实际上是多个引用变量所组成的集合,这些引用变量指向实际的Ja

3、va对象。集合和引用ﻫ就像引用类型的数组一样,当我们把Java对象放入数组之时,并不是真正的把Java对象放入数组中,只是把对象的引用放入数组中,每个数组元素都是一个引用变量。HashMap的存储实现ﻫ当程序试图将多个 key-value放入HashMap中时,以如下代码片段为例:Java代码 1.HashMap<String , Double〉 map = new HashMap

4、89.0);   4.map.put("英语" , 78.2);  HashMap采用一种所谓的“Hash算法”来决定每个元素的存储位置。ﻫﻫ当程序执行map.put("语文",80.0); 时,系统将调用”语文"的 hashCode() 方法得到其hashCode值-—每个 Java对象都有 hashCode()方法,都可通过该方法获得它的hashCode 值。得到这个对象的hashCode值之后,系统会根据该hashCode值来决定该元素的存储位置。我们可以看HashMap 类的 put(Kkey, Vval

5、ue) 方法的源代码: ﻫﻫJava代码ﻫ public Vput(Kkey,Vvalue) ﻫ {ﻫ     //如果key 为null,调用 putForNullKey方法进行处理ﻫ    if(key==null)ﻫ       returnputForNullKey(value);ﻫ    //根据key的keyCode 计算 Hash 值ﻫ    inthash=hash(key。hashCode()); ﻫ    //搜索指定hash 值在对应 table 中的索引ﻫ     int i=indexF

6、or(hash, table。length);ﻫ    //如果i 索引处的Entry不为null,通过循环不断遍历e元素的下一个元素ﻫ    for(Entry<K,V>e =table[i];e!=null;e= e.next)     {ﻫ        Objectk;       //找到指定key 与需要放入的 key 相等(hash 值相同        //通过 equals比较放回true)       if(e.hash==hash&&((k=e.key)==key          ||ke

7、y。equals(k)))         {ﻫ           V oldValue =e。value;          e.value =value;ﻫ           e.recordAccess(this);ﻫ           returnoldValue;ﻫ       }     }     //如果i 索引处的 Entry为null,表明此处还没有Entryﻫ    modCount++;     //将key、value添加到i索引处ﻫ    addEntry(hash, key, 

8、value,i); ﻫ     return null;  } 上面程序中用到了一个重要的内部接口:Map。Entry,每个Map.Entry其实就是一个 key-value 对。从上面程序中可以看出:当系统决定存储 HashMap中的key-value对时,完全没有考虑Entry中的value,仅仅只是根据key来计算并决定每个Entry的存储位置。这也说明了前面的结论

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。