天天看点

HashMap源代码|学习笔记HashMap源代码

开发者学堂课程【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( ) ;

}

}

出现错误

HashMap源代码|学习笔记HashMap源代码

此时会出现“java.util.ConcurrentModificationException”表示的就是存储个数和操作个数不同。