开发者学堂课程【Java面试疑难点串讲1:面试技巧及语言基础:HashMap源代码】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/24
HashMap源代码
内容介绍
1. HashMap类
2. 代码示例
HashMap源代码没有什么特别多的关注点,主要需要从里面看出来以下几点: Map.Entry 与HashMap.Node类;
static class Node<K,v> implements Map.Entry<K,v>{
在HashMap存储数据增加到一定数量的时候(阈值),那么就会由链表变为红黑树(类似于二分查找
的性能更快);.
• 阈值: static final int TREEIFY_ THRESHOLD = 8;超过了这个内容变为红黑树;
• HashMap_里面对于数据的保存个数的扩充是按照倍数进行的,但是这里面有一个参考
• static final float DEFAULTLOADFACTOR = 0.75f;
• 如果达到了16*0.75个数的时候会进行第一次的容量扩充
• HashMap_里面的方法都是异步处理,属于非线程安全的:
import java.util.HashMap;
import java.util.Map;
public class Demo {
public static void main(String[ ] args) throws Exception {
Map<String, string> map = new HashMap<string,string>();
for (int x = ; x < 10 ; x ++) {
new .Thread(()->{
for( int y=0;y<3 ;y++){
map.put(Thread.currentThread().getName(),"y="+y);
}).start( ) ;
}
}
出现错误
此时会出现“java.util.ConcurrentModificationException”表示的就是存储个数和操作个数不同。