当你学了很多技术,才发现一切回到起点才是正确的选择,也是唯一正确的选择。工作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初级,进阶,高级,架构视频和书籍资料,大家一起交流学习。