自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 Java中ArrayList类学习笔记(常用函数用法学习)

ArrayList类ArrayList类是一个特殊的数组–动态数组。来自于System.Collections命名空间;通过添加和删除元素,就可以动态改变数组的长度。特点:查找快、遍历快增加元素和删除元素慢ArrayList中有众多函数,接下来就其中一些较为常用的函数进行分析和使用。构造函数对于ArrayList的构造函数,一共提供了三种,如下所示。// 构造一个初始容量为 10 的空列表public ArrayList() // 构造一个具有指定初始容量的空列表publi

2021-09-18 20:44:42 630

原创 Java中ListIterator学习笔记(源码分析)

ListIterator接口文章目录ListIterator接口类定义构造函数hasPrevious()函数nextIndex()函数previousIndex()函数previous()函数set(E e)函数add(E e)函数继承Iterator中的方法hasNext()函数next()函数remove()函数ListIterator接口时Iterator接口的子接口,故ListIterator不光具有Iterator中的next()、hasNext()、remove()方法之外,自己也有一些其他

2021-09-18 16:47:58 478

原创 Java中List接口学习笔记(常用函数)

List接口文章目录List接口List中特有的方法样例代码List接口是Collection接口的子接口List接口的特点在于:有序、有下标、元素可以重复。由于List接口时Collection的子接口,所以List接口也具有Collection接口中的所有功能,但是同时List接口也具有一些自己独有的方法。List中特有的方法void add(int index , E element),在列表的指定位置插入指定元素(可选操作)。将当前处于该位置的元素(如果有的话)和所有后续元素向右移动

2021-09-18 13:35:56 1114

原创 Java中Iterator迭代器学习笔记(源码分析)

Iterator迭代器文章目录Iterator迭代器成员变量hasNext()函数next()函数remove()函数总结在遍历集合的时候,会经常使用Iterator迭代器,其原理实现也较为简单,可以将其与单链表的实现进行对比理解。在Java中内置的Iterator接口中,主要是针对三个方法,如下所示:boolean hasNext();E next();void remove();其中hasNext判断后续是否还有元素可以进行迭代,也可以理解为后面还有没有元素,next函

2021-09-18 00:09:27 332

原创 Java中Collection类学习笔记

Collection接口Collection集合的顶层接口,也正因为其是一个接口类型,所以Collection是不可以被实例化的。但是在Collection接口的基础上,又衍生出了许许多多的子接口和可实现类。Collection体系集合Collection接口作为根接口,在此基础上,衍生出了List子接口和Set子接口,两种接口又具有不同的特点。List:内部元素有序,有下标,元素可重复。Set:内部元素无序,无下标,元素不重复。之后再List子接口和Set子接口上又衍生出了许许多多的实现类,

2021-09-17 22:55:07 146

原创 Java中System类学习笔记

System类文章目录System类arraycopy()函数currentTimeMillis()函数getProperty()函数gc()函数exit()函数测试代码System系统类,主要用于获取系统的属性数据和其他操作,构造方法是私有的。System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员方法和成员变量都是static(静态)的,所以也可以很方便的调

2021-09-17 13:16:53 171

原创 Java中SimpleDateFormat类学习笔记

SimpleDateFormat类文章目录SimpleDateFormat类构造方法常用函数SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。进行格式化:日期—>文本进行解析:文本–>日期常用的时间模式字母字母日期或时间示例y年2019M年中月份08d月中天数10H一天中小时数(0~23)22m分钟16s秒59S毫秒367构造方法在一般情况下,使用含参的

2021-09-17 00:37:47 116

原创 Java中Calendar类学习笔记(抽象类)

Calendar类文章目录Calendar类构造方法常用函数Calendar提供了获取或设置各种日历字段的方法。Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。该类还为实现包范围外的具体日历系统提供了其他

2021-09-17 00:15:51 323

原创 Java修饰符权限学习笔记

Java修饰符这里主要对Java中private、protected、public和default的区别进行解释。public:具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。protected:主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西default:有时候也称为friendly,它是针对本包访问而设计的,任何处于本包下的类、接口、异

2021-09-16 23:26:59 97

原创 Java中Date类学习笔记

Date类文章目录Date类构造方法常用方法Date表示特定的瞬间,精确到毫秒。Date类中大部分方法都已经被Calendar类中方法所取代。时间单位:1秒 = 1000毫秒1毫秒 = 1000微秒1微秒 = 1000纳秒构造方法Date类的构造方法现在主要只使用两种,其他的已经过时了,被Calendar中其他类取代。// 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。public Date() { this(System.currentTim

2021-09-16 23:11:01 117

原创 Java中BigDecimal类学习笔记

BigDecimal类文章目录BigDecimal类构造方法基本运算在计算机中,绝大多数浮点数是无法精确存储的,只能保存该浮点数的近似值,如果单纯使用运算符来进行运算,很容易造成精度损失的问题,如下代码所示:public static void main(String[] args) { double d1 = 1.0; double d2 = 0.9; System.out.println(d1 - d2); double resu

2021-09-16 22:43:29 155

原创 String、StringBuffer、StringBuilder学习笔记

StringBuffer和StringBuilderString类是不可变的类型,也就是尝试对字符串进行修改的时候,不会对原字符串进行修改,而是在原字符串的基础上进行修改,然后生成一个新的字符串存放在常量池中。对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法。在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法。在早

2021-09-16 15:34:24 147

原创 Java中String类学习笔记

String类String代表字符串,它具有以下特点:字符串是常量,创建之后不可改变字符串字面值存储在字符串池中,可以共享上述特点中的不可改变性主要体现在如果对一个字符串对象重新赋值,并不是去修改对象内部的字符串信息,而是先去字符串常量池查看是否存在新字符串,如果存在则返回地址;如果不存在则新创建一个字符串对象在字符串常量池中,然后返回地址。例如下列代码:String name = "hello";name = "world";假设字符串常量池默认为空,则一开始定义name的时候会在常

2021-09-15 23:54:01 102

原创 Java包装类学习笔记(装箱拆箱、字符串转换、整数缓冲区)

包装类文章目录包装类类型转换与装箱、拆箱基本类型与字符串的转换整数缓冲区Java中的数据类型有三种:字符类型char 16位,存储Unicode码,用单引号赋值布尔类型Boolean 只有true和false两个取值数值类型3.1 byte 8位,最大存储数据量是255,存放的数据范围是-128~127之间3.2 short 16位,最大数据存储量是65536,数据范围是-32768~32767之间3.3 int 32位,最大数据存储容量是2的32次方减1,数据范围是负的2的

2021-09-15 15:35:32 108

原创 Java中Object类学习笔记(类函数)

Object类​ Object类具有以下特点:Object类是超类、基类,所有类的直接或间接父类,位于继承树的最顶层。任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。Object类中所定义的方法,是所有对象都具备的方法。Object类型可以存储任何对象(作为参数,可接受任何对象;作为返回值,可返回任何对象)getClass()方法public final Class<?> getClass()返回值:返回该方法返回引用中存储的

2021-09-14 23:40:31 185

原创 Java内部类学习笔记

内部类​ 内部类就是在一个类的内部再定义一个完整的类。class Body { class Header { }}​ 编译之后得到的字节码文件:特点:编译之后生成独立的字节码文件。内部类可直接访问外部类的私有成员,而不破坏封装。可以为外部类提供必要的内部功能组件。文章目录内部类成员内部类静态内部类局部内部类匿名内部类成员内部类​ 成员内部类在内部定义,与实例变量、实例方法同级别的类。成员内部类是外部类的一个实例部分,创建内部类对象时,必须依赖外

2021-09-14 17:46:39 73

原创 二叉排序树整理(创建,插入,查找,删除)

二叉排序树查找表分为静态查找表和动态查找表,其中动态查找表的含义就是表结构本身是在查找过程中动态生成的。即若表中存在其关键字等于给定值keykeykey的记录,表明查找成功,否则插入关键字等于keykeykey的记录。​而动态查找表中最为典型的就是二叉排序树和哈希表,接下来重点对于二叉排序树的内容进行学习。文章目录二叉排序树二叉排序树-定义二叉排序树-查找二叉排序树-插入二叉排序树-建立二叉排序树-遍历二叉排序树-删除二叉排序树-性能分析二叉排序树-定义​ 空树或者是具有如下特性的二叉树被称为二叉

2021-09-03 01:39:00 7677 1

原创 哈希表与哈希查找

哈希表(哈希查找)​ 前面对于顺序表进行查找时,在判断当前数据是否是要查找的数据时,需要去通过“=”来进行判断,直到有了相等的关键字才返回地址。在这种查找方式中,“比较”是必不可免的,那么是否有一种方法可以避免比较,即通过关键字的某种形式来存储该数据的地址,这样在查找时,将待查询的关键字通过一定计算就可以得到目的数据的地址。文章目录哈希表(哈希查找)哈希表概念哈希函数构造方法直接定址法数字分析法平方取中法折叠法除留余数法处理冲突开放定址法线性探测二次探测再哈希法链地址法性能分析哈希表概念​ 哈希表,

2021-08-28 14:10:37 1892

原创 查找(顺序查找,折半查找,分块查找)

查找​ 查找是在查询数据过程中必不可少的一个环节,那么如何来进行查找,以及如何进行高效率的查找,就是接下来要解决的问题。文章目录查找查找的概念顺序查找顺序查找-算法原理顺序查找-算法实现顺序查找-性能分析折半查找折半查找-算法原理折半查找-算法实现折半查找-性能分析分块查找分块查找-算法原理分块查找-算法实现分块查找-性能分析查找的概念​ 首先提出一些定义,在查找元素的时候,必然是从一堆数据中去找自己想要的数据,那么这种由同一类型的数据元素构成的集合就被称为查找表。对于查找表可执行以下操作:查询

2021-08-27 22:08:30 3240 1

原创 排序算法整理(冒泡排序,选择排序,直接插入排序,希尔排序,快速排序,堆排序,归并排序)

排序算法​ 排序即将一个数据元素的任意序列,重新排列称一个按关键字有序的序列。​ 根据在排序过程中排序的记录是否全部被放置在内存中,排序分为两种,内部排序和外部排序。内部排序:在排序期间数据对象全部存放在内存的排序外部排序:在排序期间全部对象个数太多,不能同时存放在内存,必须根据排序过程的要求,不断在内存和外存之间移动的排序。对于排序来说,只有两个最基本的操作,第一个就是比较,比较不同数据之间的关键字的大小关系;第二个就是移动,在得到比较结果之后,按照一定的规则来移动元素使其最终有序。文章目

2021-08-24 01:51:06 535

原创 关键路径整理

关键路径​ 在有了拓扑排序的基础之后,对于一个完整的流程可以进行一个先后顺序的编排。但是如果需要具体到走完该流程最短需要多少事件时,仅仅使用拓扑排序的内容是是不够的。接下来就如何求解该问题进行进一步学习。文章目录关键路径AOE−AOE-AOE−网关键活动AOE−AOE-AOE−网​ 在前面AOV−AOV-AOV−网的基础上,接下来提出AOE−AOE-AOE−网的概念。**如果使用有向图的顶点表示事件,用弧表示活动,用弧上的权值表示活动的持续时间,这种有向图的弧表示活动的网,称之为AOE−AOE-AO

2021-08-19 23:16:46 288

原创 拓扑排序原理及实现

拓扑排序文章目录拓扑排序AOV−AOV-AOV−网拓扑排序​ 拓扑排序主要是应用在有向无环图中的一种排序方法,在一个有向无环图中,所有的事情都存在一个先后关系。举个简单的例子,大学里面专业课的学习,部分专业课需要有高等数学的基础才可以进行学习,这个也叫做先修课程。但是同时有的可能也可以并行的学习,因为两者没有交叉,互不影响。接下来举一个简单的例子。​ 那么可以利用图结构来表达该先后关系,如下图所示。​ 那么在给定一个“先修课程”的关系之后,如何才能得到正确的“修读”顺序呢,这就需要使用到接下来讲

2021-08-18 17:20:17 331

原创 最短路径(Dijkstra算法和Floyd算法)

最短路径​ 在图中,不可避免要解决的一个问题就是计算两点之间的最短路径,对于图结构来说,两个点之间不一定只有一条路径,那么如何才能找出最短的那一条就是图中最短路径问题。最短路径问题在实际生活中应用十分广泛。接下来主要介绍两种较为常用的最短路径算法—DijkstraDijkstraDijkstra算法和FloydFloydFloyd算法。文章目录最短路径迪杰斯特拉DijkstraDijkstraDijkstra算法FloydFloydFloyd算法最小生成树与最短路径的区别​ 首先需要对最短路径问题进行

2021-08-18 02:50:29 46569 6

原创 最小生成树(Prim算法和Kruskal算法)

最小生成树​ 本部分主要对图中一些关于连通性和最小生成树的概念进行学习和理解,之后对于建立最小生成树的两种算法进行学习和实现。​ 接下来主要对于无向图进行分析,有向图也是一样的分析方法。文章目录最小生成树图的连通性以及生成树图的连通性判断最小生成树普里姆算法PrimPrimPrim克鲁斯卡尔算法KruskalKruskalKruskal图的连通性以及生成树​ 首先对图连通性中一些定义进行阐释:在无向图中,如果存在不连通的顶点,则该图称为非连通图。非连通图的最大连通子图叫做连通分量。若从无向

2021-08-15 23:56:55 902

原创 图知识点整理(创建与DFS,BFS)

图​ 在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,单只能和上一层中一个元素相关,这个一对父母可以有多个孩子,但是每个孩子只能由一对父母相对应。​ 但是在处理复杂关系的时候,例如人与人之间的关系,这个并不能简单的使用一对一或一对多的形式来进行表示,而是要考虑多对多的一些情况。故这里引入图结构。文章目录图图的定义图的存储结构邻接矩阵邻接表图的遍历深度优先遍历DFS

2021-08-11 02:51:38 207

原创 赫夫曼树(Huffman树)整理

赫夫曼编码​ 赫夫曼编码主要用于信息压缩中,是目前压缩效率较高的一种编码方式。在实现赫夫曼编码的时候,就是使用二叉树去进行实现。​ 这里简单列举一个赫夫曼编码的例子,对于一个文章,提取出其中所有的词以及出现的次数,那么如何来根据这些词出现的次数来对这些词进行编码,以使得最终由编码组成的文章尽可能的短。文章目录赫夫曼编码最优二叉树赫夫曼树—构造赫夫曼树—编码赫夫曼树—解码最优二叉树​ 在介绍如何实现赫夫曼编码之前,首先对二叉树中的最优二叉树进行学习和理解。先来对其中一些名词进行定义:路径:从树中

2021-08-08 19:21:06 308

原创 二叉树整理

二叉树​ 树是不同于顺序表的一种新的数据结构。按照结点数量和树的结构可以将树分为很多种,本部分重点介绍二叉树的基本内容。文章目录二叉树树的定义二叉树的定义二叉树的性质二叉树的存储结构二叉树的遍历先序遍历中序遍历后序遍历二叉树的建立二叉树扩展内容二叉树的高度计算二叉树非递归实现先序遍历层次遍历带权路径和结点最大距离最长路径树的定义​ 首先对树的一些基本概念有一个了解。树是有n(n⩾0)n(n\geqslant 0)n(n⩾0)个结点的有限集合。如果n=0n=0n=0,称为空树。如果n>0

2021-08-06 02:54:05 267

原创 KMP算法详解

文章目录KMP算法前置知识串的基本概念C++C++C++中stringstringstring库的函数KMP核心算法—next数组KMP匹配next数组计算例题KMP算法改进其他字符串知识点计算最长前缀后缀计算循环节补充字符使原字符串变为循环串KMP算法​ KMPKMPKMP算法是字符串匹配中的一个较好的算法,它的目的是在给定一个模式串ppp和原字符串qqq中,找到ppp在qqq中第一次出现的位置。​ 如上图所示,可以很简单的看出字符串ppp在字符串qqq中第一次出现的位置,如果位置从1开始计算的话

2021-07-30 22:38:15 2253

原创 C\C++实现队列

队列​ 队列和栈一样,都是一种特殊的线性表。队列是只允许在一端进行插入操作,在一端进行删除操作的线性表。在队列中,允许插入的一端称为队尾,允许删除的一端称为队头。队列和生活中的排队是一个道理,例如在游乐场中排队等待过山车,新来的人只能添加在队尾,而刚结束过山车体验的人从队头离开队伍。​ 故队列是一种先进先出的线性表,也就是“先进来的先出去”。循环队列​ 在使用线性表实现队列的时候,这里以顺序表为例,也就是使用一维数组来当作队列的数据域。故对于该一维数组而言,队列的头指针和尾指针都是所必须的,因为涉

2021-07-28 01:01:47 506

原创 C/C++实现栈

栈​ 与前面的线性表相似,栈作为一种新的数据结构,也是用来保存数据的,同时栈可以使用顺序表和链表来进行实现。但是栈与线性表不同的是,栈是限定仅在表尾进行插入和删除操作的线性表。​ 栈是一种特殊的线性表,可以将它想象成一个薯片筒,只有一个开口。在栈中,将可以放入和拿出数据的一端称为栈顶,而另一端被称为栈底。由于栈依旧是线性表,所以栈中的元素也有前驱和后继的关系。​ 根据上述对于栈特点的介绍,可以知道栈在线性表的基础上,限定了插入的位置和删除的位置,只能在栈顶进行插入和删除。先插入的数据被压在更接近栈底的

2021-07-27 01:42:26 1135 1

原创 链表的基本操作

单链表​ 在线性表结构中,有顺序表和链表两种结构,其中顺序表虽然在查找时快速和方便,但是在插入和删除的时候则需要移动很多的无关元素。在面对一些插入删除频繁的操作时性能并不是很好,故这里提出了另一种数据结构—链表。​ 链表是指一类数据结构,其中有很多类型,如下所示单链表双向链表循环链表静态链表链表作为顺序表的一种改进模式,它重点强调的是两个相邻结点之间的逻辑关系,也就是某个结点和它前驱以及后继的关系。在顺序表中,这种关系主要体现在数组中连续存储,它们的数组下标也就是连续的整数。​ 在链表中

2021-07-26 02:07:27 392

原创 线性表的基本操作

线性表​ 线性表总的来说其实就是一个简单的一维数组,那么从这里就可以看出线性表的特点—有限,因为数组在定义的时候就需要声明数组的空间大小,或者说是可以保存到数据元素的个数。同时根据数组的特点,线性表中每个元素,除了头和尾,都有一个直接前驱和直接后继,例如对于元素a[i]a[i]a[i],它的直接前驱就是a[i−1]a[i-1]a[i−1],直接后继就是a[i+1]a[i+1]a[i+1]。​ 接下来根据上述线性表的特点,先设计出线性表的抽象数据类型,也就是使用一个结构体将线性表中所有的信息进行综合。那么

2021-07-21 01:56:40 1767

原创 最通俗易懂的KMP算法原理

KMP算法原理讲解文章目录KMP算法原理讲解前言一、KMP算法的本质二、KMP核心算法三、KMP匹配总结前言其实这一期本来是打算更新一期图算法的,但是作为数据结构的助教,还是想记录和数据结构有关的一些东西,也可以理解为我想让更多的人看我写的一些东西。反正,总而言之,不管是为了什么,这一期给大家通俗易懂的讲解一下KMP算法,依旧坚持我们的宗旨,用最通俗易懂的话语来解释算法的本质!如果本文有错误,还请大家及时纠正!一、KMP算法的本质大家先不要慌,这里并不给大家讲那些复杂的原理,主要给大家讲一下

2020-10-25 12:52:51 1639 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除