- HashMap
- 通过扩容可以减少链表长度
- 当链表长度超过8时会扩容
- 当数组长度到达64且链表长度超过8个的时候会转化成红黑树
- 红黑树
- 左结点都是比结点小
- 右结点都是比结点大
- 先比较hashcode,在比较值
- 扩容是原来的2倍
- 树里面排序是按照字符串排序
- 正常情况下链表不会超过6个,只有当遭到dos恶意攻击时,恶意存入一样的hashcode,才会超过8,当超长链表出现的时候系统性能会下降的很快,树化就是为了防止遭受这种攻击。
- 红黑树的时间复杂度 long2 n
- 树的占用空间比链表大,如非必要不会树化
- 退化情况
- 扩容时如果链表小于等于6个就会退化为链表
- remove树结点时,若root,root-left,root-right,root-left-left有一个为null,也会退化为链表,注意是移除之前检查,如果移除后不再了不会退化,若检查到为null了才会退化
- 97 % 16 == 97 &(16-1)
- 因为取模运算和按位与运算需要是2的n次幂才是等价的,所以hashmap的容量是2的n次幂,按位与运算比取模运算性能高。
- 采用质数来当作数组容量,在所有都是偶数的key时,分布情况好。
- 采用效率高,应该用2的n次幂来作为数组容量
- 1。7的put操作时头插法,1。8的put操作时尾插法
- 扩容因子是0。75,当超过数组容量*0。75时会扩容
- key可以为null,其他map就不行
- 作为key的对象,必须实现hashCode和equals。并且key的内容不可变,否则就会找不到这个key
- String对象hashcode,每次乘31来达到很好的散列效果
- 设计模式
- 饿汉式
- 还没实例化就已经被创建好了
- 私有构造方法
- 静态成员变量唯一实例
- 静态方法返回实例
- 懒汉式
- 使用到才创建好
- DCL double check lock
- if instance == null
- synchranized
- if instance == null
- instance 上要加volatile
- volatile可以解决可见性和有序性问题,添加了这个关键字会阻止了代码指令重排序,就不会出现线程2出现没有进行构造的实例。
- 还有一种静态内部类来创建初始化的一种方式,
- 枚举类
- 饿汉式
- 不怕序列化和反射破坏单例模式
- 单例在jdk
- Runtime 饿汉式
- System的Console 懒汉式 (控制台)
- Collections集合中有许多
- Comparator 采用枚举实现单例
- 并发
- 线程状态
- new 新建
- new线程的时候就是新建状态
- 通过start 转换成可运行
- runnable 可运行
- terminated 终结
- 线程执行完毕进入终结状态
- blocked阻塞
- 获得锁失败时
- 获得锁成功后进入可运行
- waiting等待
- 获得锁成功,条件不满足的时候会调用wait()方法,进入等待状态,同时释放锁
- 当条件满足了,别的线程会调用notify()来进入可运行
- timed waiting 等待 有时限
- wait(long),进入等待
- 时间到或notify()进入可运行
- 调用sleep也会进入等待
- 时间到后进入可运行
- 线程池的核心参数
- corePoolSize 核心线程数目,最多保留的线程数,可以为0,
- maximumPoolSize 最大线程数目,核心线程数+救急线程
- keepAliveTime生存时间,针对救急线程
- unit 时间单位 针对救急线程
- workQueue 阻塞队列
- threadFactory 线程工厂,可以为线程创建时起一个好名字
- handler 拒绝策略
posted @
2022-07-13 13:32
hanukkah
阅读(
37)
评论()
编辑
收藏
举报
点击右上角即可分享
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端