hashMap原理分析

当你学了很多技术,才发现一切回到起点才是正确的选择,也是唯一正确的选择。工作5年多了,又开始重新看起了基础。才发现以前不懂的地方太多,需要沉下心来好好理解。

 

根据昨天的学习,从浅入深来理解一下hashMap

 

1 hashMap使用

 常用的两种方式获取hashMap里面的数据

 1) 首先获取map的keyset集合,然后遍历keyset集合,获取key对应map里面的value。

简单代码参考:

HashMap<String,String> map=new HashMap<String,String>();

Set<String> set=map.keySet();

for(String str:set){

map.get(str);

}

 

2) 获取map内部类entry的集合,遍历entryset

简单代码参考:

HashMap<String,String> map=new HashMap<String,String>();

Set<Map.Entry<String,String>> es=map.entrySet();

for(Map.Entry<String,String> entry:es){

System.out.println(entry.getValue());

 

扩展:根据hashMap的key唯一特性,可以用来做计数算法,并可以和TreeSet一起完成排序。实现Compare接口,重写compareTo方法。

 

2 hashMap底层原理

1) hashMap底层实现机制是由数组+单向链表组成,数组默认长度是16,扩展的方式是按2的指数,扩展       因子0.75,意思就是当数组被利用了75%,一般就认为数组满了,就会扩展数组的长度,至少是2倍的           方式扩展。

 

 2) hashMap存储的数据是Map.Entry对象,包含key,value,next(也是entry对象),hash。所以数组里

存的都是Map.Entry对象,当存储新元素时,会根据key的hashcode和数组的长度进行hash算法,计算         出 一个位置,如果该位置没有元素,则将该对象保存到相应位置,如果已经有了元素,则插入到链表,         或者重新hash计算新的位置。

 

扩展:hashSet底层是通过hashMap实现的。hashSet只需要得到key的集合,hashMap的value统一使用无   意义的常量来占用即可。

 

总结了一下昨天学到的东西,继续奋斗。

 

有兴趣的朋友可以加入我的互联网架构群:477819525

内有大量java初级,进阶,高级,架构视频和书籍资料,大家一起交流学习。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    

猜你喜欢

转载自atongyeye.iteye.com/blog/2335022