java基础
文章平均质量分 61
java基础
IFuZzz
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Tree树
树的存储方式都是以链表的方式来实现的1.二叉排序树1.1若左侧不为空,则左边的所有节点的值都小于它的根节点的值1.2若右侧不为空,则右边的所有节点的值都大于或等于它的根节点的值1.3因此左右两侧也称为二叉排序树问题:当二叉排序树两侧不平衡时,那么树的作用不就没有意义了吗根据以上问题,衍生出了平衡二叉树 2.平衡二叉树任意子节点的高度差都要小于等于1 那...原创 2022-02-23 11:24:41 · 348 阅读 · 0 评论 -
JVM内存模型
jvm基本结构类加载子系统: 将class文件加载到jvm中方法区: 加载class信息/运行时常量池存放在方法区java堆: 基本上所有的java实例/对象都是存放在java堆中方法区以及java堆都是公有java栈: 普通方法的一些信息(方法入参/局部变量/中间临时数据/返回数据/异常状态处理)都是存放在栈中(私有)本地方法栈: 类似java栈,不过不是普通方法而是nativeMethod寄存器:用来指向正在被执行的位置直接内存: 对外内存,向系统申请内存空间(与jav原创 2021-10-14 13:33:11 · 197 阅读 · 0 评论 -
JDK1.8---reduce和collect聚合函数
reduce和collect都是一种聚合操作。本篇文章就是reduce和collect聚合函数自定义静态方法实现reduce实现filterprivate static <T> List<T> reduceFilter(List<T> list, Predicate<T> p){ List<T> ret = new ArrayList<>(); return list.stream().原创 2021-08-27 17:33:57 · 491 阅读 · 0 评论 -
HashMap扩容resize流程
resize函数触发时机:1.初始化HashMap的默认扩容一个cap为16 threshold为12的Node<K, V>[] newTab2.当hashMap的size>threshold的时候再次扩容,扩容为16*2的cap,threshold*2的Node<K, V>[] newTab3.当table中Node链表大于8且tab.length小于64的时候,hash再次double扩容下面直接上流程图第一阶段:主要为计算出新的newCap(扩容.原创 2021-08-20 14:27:51 · 1978 阅读 · 1 评论 -
HashMap数据插入put
hash:hash值value:存储元素key:键onlyIfAbsent:如果是true,则不改变已存在的value值tab:数组+链表 数组index定位链表所在位置p:链表 存储的数据从源码可以看出第一次tab为空,tab需要默认resize()扩容一次,第一次扩容的长度为16Node<K, V>[] tab扩容原理这里暂不做解释hashMap第一次put数据tab[hash& (length-1)]定位数组是否存在no...原创 2021-08-19 16:17:40 · 309 阅读 · 0 评论 -
HashMap扰动函数
可以从源码中看出hash值都是通过与自身值异或和自身异或hash& (length-1);hash求余之后将hash值减小,为了避免hash碰撞(求于之后就有两个hash值相等),这个时候需要扰动函数扰动函数:计算出来的hash值更加不确定还减少hash碰撞扰动函数原理:扰动函数————(h = key.hashCode()) ^ (h >>> 16) 表示: 将key的哈希code一分为二。其中: 【高半区16位】...原创 2021-08-19 14:40:21 · 2349 阅读 · 0 评论 -
LinkedList个人心得
add操作:默认在linkedList新增在最后一个LinkedList里面只记录first(第一个节点元素)和last(最后一个节点元素)node节点中关联pre(上一个节点元素)和next(节点元素)该Node节点实际就是整个LinkedList的承载器,可以理解为ArrayList的elementData从Node该类可以看出LinkedList底层是链表原理(前置和后置节点关联)由此可以看出LinkedList适用于新增/修改,只需要关联节点的左右...原创 2021-08-18 11:18:13 · 156 阅读 · 0 评论 -
ArrayList个人心得
字段:size并不代表elementData的长度,代表ArrayList的元素数量构造:从无参构造可以看出ArrayList底层走的数组原理,ArrayList的操作都是由elementData来记录Add操作:从add方法看出,elementData[size++]才是真正的新增操作,ensureCapacityInternal(size + 1)实际是为了给elementData数组扩容操作扩容原理:扩容之前为了计算出ArrayL...原创 2021-08-17 15:01:11 · 270 阅读 · 0 评论
分享