hashmap详解(通俗易懂)

hashmap详解(通俗易懂)

ID:11557804

大小:87.50 KB

页数:7页

时间:2018-07-12

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

《hashmap详解(通俗易懂)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、java中HashMap详解    HashMap和HashSet是JavaCollectionFramework的两个重要成员,其中HashMap是Map接口的常用实现类,HashSet是Set接口的常用实现类。虽然HashMap和HashSet实现的接口规范不同,但它们底层的Hash存储机制完全一样,甚至HashSet本身就采用HashMap来实现的。通过HashMap、HashSet的源代码分析其Hash存储机制实际上,HashSet和HashMap之间有很多相似之处,对于HashSet而言,系统采用Hash算法决定集合元素的存储位置,这样可以保证能快速存、取集合元素;对于HashMap

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

3、现当程序试图将多个key-value放入HashMap中时,以如下代码片段为例:Java代码1.HashMap map = new HashMap();   2.map.put("语文" , 80.0);   3.map.put("数学" , 89.0);   4.map.put("英语" , 78.2);  HashMap采用一种所谓的“Hash算法”来决定每个元素的存储位置。当程序执行map.put("语文",80.0);时,系统将调用"语文"的hashCode()方法得到其hashCode值——每个Java对象都有has

4、hCode()方法,都可通过该方法获得它的hashCode值。得到这个对象的hashCode值之后,系统会根据该hashCode值来决定该元素的存储位置。我们可以看HashMap类的put(Kkey,Vvalue)方法的源代码:Java代码 publicVput(Kkey,Vvalue) {    //如果key为null,调用putForNullKey方法进行处理    if(key==null)       returnputForNullKey(value);    //根据key的keyCode计算Hash值    inthash=hash(key.hashCode());    //

5、搜索指定hash值在对应table中的索引     inti=indexFor(hash,table.length);    //如果i索引处的Entry不为null,通过循环不断遍历e元素的下一个元素    for(Entrye=table[i];e!=null;e=e.next)    {       Objectk;       //找到指定key与需要放入的key相等(hash值相同       //通过equals比较放回true)       if(e.hash==hash&&((k=e.key)==key          

6、

7、key.equals(k)))      

8、 {          VoldValue=e.value;          e.value=value;          e.recordAccess(this);          returnoldValue;       }    }    //如果i索引处的Entry为null,表明此处还没有Entry    modCount++;    //将key、value添加到i索引处    addEntry(hash,key,value,i);    returnnull; }上面程序中用到了一个重要的内部接口:Map.Entry,每个Map.Entry其实就是一个key-value对

9、。从上面程序中可以看出:当系统决定存储HashMap中的key-value对时,完全没有考虑Entry中的value,仅仅只是根据key来计算并决定每个Entry的存储位置。这也说明了前面的结论:我们完全可以把Map集合中的value当成key的附属,当系统决定了key的存储位置之后,value随之保存在那里即可。上面方法提供了一个根据hashCode()返回值来计算Hash码的方法:hash()

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

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

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