摘要: 1.循环队列 在基于动态数组的队列中我们发现,在移出队首元素时时间复杂度为O(n),为了解决这个问题,我们引出了循环队列。 实现原理:双指针,多维护一个指针指向队首,当队首元素移出时,基于数组实现的队列中的元素不需要全部向前移动一个位置,只需要指向下一个元素。 2.手动实现基于动态数组的循环队列及复 阅读全文
posted @ 2020-08-05 23:58 张天赐的博客 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 1.队列基础 队列是一种先进先出的数据结构(先到先得 First In First Out) 队列也是一种线性结构 相比于数组,队列对应的操作是数组的子集 只能从一端(队尾)添加元素,从另一端(队首)取出元素 2.手写基于动态数组的队列及复杂度分析 package com.tc.javabase.d 阅读全文
posted @ 2020-08-05 23:57 张天赐的博客 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 1.栈基础 结构特性:先进后出 2.手写基于动态链表的栈 package com.tc.javabase.datastructure.array.stack; import com.tc.javabase.datastructure.array.ArrayList; import com.tc.ja 阅读全文
posted @ 2020-08-05 23:43 张天赐的博客 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 1.数组基础 数组最一种存放数据的线性数据结构 ,最原始的数组是一种静态数组,需要声明数组的容量,一旦new出来数组对象大小不可改变,可以通过索引来进行数据的增删改查。我们可以通过对静态数组的二次封装来进行改进成动态数组。 数组最大的优点:快速查询。 数组最好用于“索引有语意”的情况。 但并非所有有 阅读全文
posted @ 2020-08-05 23:38 张天赐的博客 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 一.运行时数据区 一个class文件被classloader加载到内存,经过load/link/initialize三步之后,然后交给jvm的运行时引擎运行,运行的时候在内存里面是一个什么情况? 根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。 程序计数器 阅读全文
posted @ 2020-08-05 21:18 张天赐的博客 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 一.对象的内存布局 在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。 1.对象头 HotSpot虚拟机对象的对象头部分包括两类信息。第一类是用于存储对象自身的运行时数据,如哈希(Hash 阅读全文
posted @ 2020-08-05 21:11 张天赐的博客 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 一.class加载过程 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验/准备/解析和初始化,最终 形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。 loading → linking (verification-> preparation → re 阅读全文
posted @ 2020-08-05 21:09 张天赐的博客 阅读(593) 评论(0) 推荐(0) 编辑
摘要: 一.java从编码到运行过程 .java文件经过编译器的编译后成为.class字节码文件,通过类加载器classloader加载到内存,然后通过字节码解释器解释或者即时编译器JIT编译,然后交给执行引擎进行执行,执行引擎再和os和硬件交互。 java 是跨平台的语言,Jvm是跨语言的平台。 ![im 阅读全文
posted @ 2020-08-05 20:53 张天赐的博客 阅读(210) 评论(0) 推荐(0) 编辑