【备战春招】第12天 Map从入门到性能分析
2023/2/20 4:20:43
本文主要是介绍【备战春招】第12天 Map从入门到性能分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
课程名称:Map从入门到性能分析
课程章节:第2章 HashMap的使用
课程讲师: 大谷
课程内容:
一、hashMap基本用法
1、hashMap的构造方法
HashMap()
HashMap(int InitialCapacity)
HashMap(int InitialCapacity,float loadFactor)
创建hashMap对象:
Map<String,Object> userMap = new hashMap();
Map<String,Object> userMap = new hashMap<String,Object>();
userMap.put("zhangsan",new Integer(120));
userMap.get("zhangsan");
2、hashMap的Entry结构
static class Entyr<K,V> implements Map.Entry<k,v> {
final K key;
V value;
Entry<K,V> next;
final int hash;
}
put方法每插入一个键值对,即往hashMap中新增一个Entry
3、hashMap的遍历-keySet
for(String key : map.keySet()){
System.out.println(key + ">>>" + map.get(key));
}
优势:既可以获得key自身,也可以获取key对应的value
4、hashMap的遍历-values
for(String v : map.values){
System.out.println("value = " + v);
}
特点:只能获取map的value值,无法获取key
5、hashMap的遍历-entrySet
for(Map.Entry<String, String> entry : map.entrySet()){
System.out.println(entry.getKey() + ">>>" + entry.getValue());
}
5、hashMap的遍历-iterator
Iterator<Map.Entry<String,String>> it = map.entrySet().iterator;
while(it.hasNext()){
Map.Entry<String,String> entry = it.next();
System.out.println(entry.getKey() + ">>>" + entry.getValue());
}
6、hashMap的遍历-性能分析
entrySet、iterator性能较好,使用频率较高,keySet性能最差
二、hashMap例题
将5个小Map存入1个大Map或List中
三、hashMap的底层原理
遍历输出的顺序与put存进去的顺序无关,那是按什么规律输出的呢?
Key转换哈希码后除16余数
1、关键的两个方法:
1)final int hash(Object k)
用hashCode()方法将key转换成hash码后,并进行优化得到优化后的hash码
例:将“yuwen”这个字符串优化后的hash码是115347492
2)static int indexFor(int h,int length)
对优化后的hash码进行取址,确定在HashMap的位置
例:115347492的长度是16的HashMap中,取址的坐标是4
3)HashMap不带参的构造方法
Map map = new HashMap();
默认长度是16,默认的负载因子是0.75,等同于Map map = new HashMap(16,0.75f);
4)HashMap带参的构造方法
HashMap(int initialCapacity) //例如 new HashMap(3)
传递的参数转化为大于它的最小的2的N次方,即4.
例:new hashMap(5):初始化的长度就是5吗?
HashMap(int initialCapacity,float loadFactor) //负载因子
例:new hashMap(10000,0.75f),要录入的数据是10000条,会产生扩容吗?
结果:2的14次方=16384*0.75=12288,大于10000,所以不会产生扩容
2、常用方法
1)判断是否为空、删除节点、清空HashMap对象
Map<String,String> map1 = new HashMap<String,String>();
map1.isEmpty(); //判断是否为空
map1.remove(key)、map1.remove(key,value); //删除节点
map1.clear(); //清空HashMap对象
2)判断是否有某个key、是否有某个value
map1.containsKey(key);
map1.containsValue(value);
3)替换某个key的value
map1.replace(key,newValue);
map1.replace(key,oldValue,newValue);
map1.put(oldKey,newValue);
map1.putIfAbsent(key,value); //key不存在时,则新增键值对
4)map循环(Lamada表达式:->)
map.forEach((key,value) -> System.out.println(key+":"+value));
map.forEach((key,value) -> {
System.out.println(key+":"+value);
});
5)key存在则输出value,不存在则输入默认值
getOrDefault(key,defaultValue);
课程收获:
map日常使用频率很高,本次课程对HashMap底层原理的讲解浅显易懂,多个常用方法非常实用,期待后面的课程。
这篇关于【备战春招】第12天 Map从入门到性能分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API