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