自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (5)
  • 收藏
  • 关注

原创 数据结构(Java实现)-图解红黑树(R-B-Tree)

1、红黑树的基本介绍红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树。红黑树满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。红黑树的特性:1、每个节点上都有存储位表示节点的颜色,颜色是红(Red)或黑(Black)。2、根节点是黑色。3、如果一个节点是红色的,则它的子节点必须是黑色的。4、.从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)5、每个叶子节点是黑色。 [注意:这里

2020-09-21 15:36:06 1656

原创 LeetCode解题笔记-LC2-计算逆波兰式(后缀表达式)的值(Postfix expression evaluation)

题目描述:Calculate the value of inverse Polish (postfix expression)The operator only contains " +", “-”, “*” and “/”, the operand may be an integer or other expressions计算逆波兰式(后缀表达式)的值运算符仅包含"+","-“和”/".被操作数可能是整数或其他表达式例如:["2", "1", "+", "3", "*"] -> ((2

2020-09-20 15:40:39 2029

原创 Java并发编程(二)-Thread类、Runnable接口与多线程原理

1、Thread线程类Java使用 java.lang.Thread 类代表线程,所有的线程对象都必须是Thread类或其子类的实例。每个线程的作用是 完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码。Java使用线程执行体来代表这段程序流。构造方法:public Thread() :分配一个新的线程对象。public Thread(String name) :分配一个指定名字的新的线程对象。public Thread(Runnable target):分配一个带有指定目标新的线程对

2020-09-20 14:55:08 1884

原创 Java并发编程(一)-线程入门(理解并发与并行、线程与进程)

1、并发与并行并发:指两个或多个事件在同一个时间段内发生并行:指两个或多个事件在同一时刻发生(同时发生)在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每 一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。而在多个 CPU 系统中,则这些可以并发执行的程序便可以分配到多个处理器上(CPU),实现多任务并行执行, 即利用每个处理器来处理一个可以并发执行的程序,这样多

2020-09-20 12:42:59 1806

原创 LeetCode解题笔记-LC1-二叉树最小深度(minimum-depth-of-binary-tree)

题目描述Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.求给定二叉树的最小深度。(最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量)示例:输入: {1,2,3,4,5}输出:2方法一:递归运行时间: 41ms 占

2020-09-17 15:57:39 1741

原创 数据结构(Java实现)-图解平衡二叉树(AVL树)

1、问题引入给定一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在分析已经构建的BST树存在的问题:左子树全部为空,从形式上看,更像一个单链表.插入速度没有影响查询速度明显降低(因为需要依次比较), 不能发挥BST树的优势,因为每次还需要比较左子树,其查询速度比单链表还慢解决方案-平衡二叉树(AVL)2、平衡二叉树介绍平衡二叉树:也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树, 可以保证查询效

2020-09-17 13:29:09 1993

原创 数据结构(Java实现)-图解二叉排序树(二叉查找树、二叉搜索树)

二叉排序树1、二叉排序树的介绍

2020-09-16 13:56:13 2196

原创 数据结构(Java实现)-图解哈夫曼树(最优二叉树)与哈夫曼编码原理(使用哈夫曼编码压缩并解压数据)

1、哈夫曼树1.1哈夫曼树基本介绍给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl) 达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)路径:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径路径长度:通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1结点的权:若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权结点的带权路径长度:从根结点到该结点之间的路径长度与

2020-09-16 09:22:24 2897

原创 算法(Java实现)-图解十大经典排序算法(五)——计数排序、桶排序、基数排序

1、计数排序1.1计数排序介绍计数排序:不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。算法描述:找出待排序的数组中最大和最小的元素;统计数组中每个值为i的元素出现的次数,存入数组C的第i项;对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1。分析:计数排序是一个稳定的排序算法

2020-09-14 16:07:48 2711

原创 算法(Java实现)-图解十大经典排序算法(四)——归并排序

1、归并排序1.1归并排序介绍归并排序(MERGE-SORT) :是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。说明:可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程算法描述:把长度为n的输入序列分成两个长度为n/2

2020-09-14 16:06:59 2311

原创 算法(Java实现)-图解十大经典排序算法(三)——选择排序(简单选择排序、堆排序)

1、选择排序1.1选择排序介绍选择式排序:是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。选择排序思想: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法描述:初始状态:无序区为R[1…n],有序区为空;第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1…i-1]和R(i…n)。该趟排序从当前无序区中-选出关键

2020-09-14 16:06:17 2402

原创 算法(Java实现)-图解十大经典排序算法(二)——插入排序(直接插入排序、希尔排序)

1、直接插入排序1.1直接插入排序算法介绍插入式排序:是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。直接插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。比如:1.2直接插入排序算法的实现import java.text

2020-09-14 16:05:15 2345

原创 算法(Java实现)-图解十大经典排序算法(一)——交换排序(冒泡排序、快速排序)

1、排序算法排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。2、排序的分类2.1按使用内存情况分内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。2.2按是否为比较类分比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比

2020-09-14 16:03:21 2330

原创 Java学习-详谈Java异常和异常处理

1、异常1.1异常概念异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将 受影响.在程序中的意思就是:异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 ( 异常机制其实是帮助我们找到程序中的问题 )在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。2、异常体系2.1Throwable类异常的根类: java.lang.T

2020-09-13 17:14:17 3645 1

原创 数据结构(Java实现)-顺序存储二叉树与线索化二叉树

1、顺序存储二叉树

2020-09-13 14:10:01 2526

原创 Java学习-详谈Map集合(HashMap、LinkedHashMap、TreeMap)

1、Map集合1.1Map集合介绍现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等, 这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即 java.util.Map 接 口。1.2Map继承关系(1):AbstractMap是一个抽象类, 继承Map,实现了Map的大部分API,它的作用Map的实现类继承它,可以减少重复编码!(2):SortedMap是一个接口 继承Map,自己也封装一下方法,Sorted

2020-09-12 15:52:02 2794

原创 数据结构(Java实现)-详谈树与二叉树结构

1、树1.1树的基本介绍树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。①、节点:上图的圆圈,比如A,B,C等都是表示节点。节点一般代表一些实体,在java面向对象编程中,节点一般代表对象。②、边:连接节点的线称为边,边表示节点的关联关系。一般从一个节点到另一个节点的唯一方法就是沿着一条顺着有边的道路前进。在Jav

2020-09-11 21:10:09 2763

原创 Java学习-Collections工具类和Java常见的几种比较器

1、Collections集合工具类1.1基本介绍java.utils.Collections 是 Java 提供的一个操作 Set、List 和 Map 等集合的工具类。Collections 类提供了许多操作集合的静态方法,借助这些静态方法可以实现集合元素的排序、查找替换和复制 等操作。1.2Collections常用方法排序(正向和逆向)Collections 提供了如下方法用于对 List 集合元素进行排序。void reverse(List list):对指定 List 集合元素进行

2020-09-10 16:26:38 3362

原创 Java学习-详谈Set集合(HashSet、TreeSet、LinkedHashSet)

1、Set接口java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了。与List接口不同的是, Set 接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。1.继承于Collection接口,具有增删查改的方法!2.AbstractCollection抽象类,实现了Collection

2020-09-09 17:07:40 3220

原创 数据结构(Java实现)-详谈哈希表(Hash Table)

1、哈希表介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。(哈希表的底层是数组)实现哈希表的两种方法:1、数组+链表2、数组+红黑二叉树2、哈希函数H(k)哈希函数:建立起数据元素的存放位置与数据元素的关键字之间的对应关系的函数。即使用哈希函数可将被查找的键转换为数组的索引。理想情况下它应该运算简单并且保证任

2020-09-08 17:34:44 5334 2

原创 算法(Java实现)-常用的查找算法(线性查找、二分查找、插值查找、斐波那契查找)

1、线性查找算法介绍:线性查找算法就是在待查数据中进行顺序性轮询查找,当存在待查的数据时返回当前数据索引位置,如果不存在则返回不存在表示-1平均查找长度:1/2(n+i)计算方式:当前元素找到的概率乘上所匹配的次数时间复杂度:O(N)例: 有一个数列: {1, 9, 11, -1, 34, 89} ,判断数列中是否包含11要求: 如果找到了,就提示找到,并给出下标值。public class SeqSearch { public static void main(String[] args)

2020-09-07 15:42:42 3370

原创 算法(Java实现)-算法的时间复杂度和空间复杂度

1、时间复杂度1.1度量一个程序(算法)执行时间的两种方法事后统计的方法这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式,要在同一台计算机的相同状态下运行,才能比较那个算法速度更快。事前估计的方法通过分析某个算法的时间复杂度来判断哪个算法更优。因事后统计方法更多的依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣。因此人们常常采用事前分析估算的方法。在编写程序前,依据

2020-09-06 14:06:06 3865

原创 Java学习-详谈List集合(ArrayList、LinkedList、Vector和Stack)

1.List接口介绍java.util.List 接口继承自 Collection 接口,是单列集合的一个重要分支,习惯性地会将实现了 List 接口的对象称为List集合。List集合有以下特点:在List集合中允许出现重复的元素(通过元素的equals方法来比较是否为重复的元素)所有的元素是以一种线性方式进行存储的它是一个带有索引的集合,在程序中可以通过索引来访问集合中的指定元素List集合的元素有序,即元素的存入顺序和取出顺序一致2.List接口中常用的方法List作为Colle

2020-09-03 13:12:19 4146

原创 Java学习-详谈泛型

泛型1.1泛型概述泛型:即 参数化类型 。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?参数化类型:就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用(调用)时传入具体的类型(类型实参)。简而言之:( 泛型就是可以在类或方法中预支地使用未知的类型。一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型)泛型的本质:是为了参数化类型(在不创建新的类型

2020-09-02 18:13:12 3980

软件设计师历年真题全汇总(2004上半年-2015上半年)(答案+解析).rar

软件设计师历年真题全汇总(2004上半年-2015上半年)(答案+解析).rar

2021-03-29

springboot基础脚手架.zip

springboot 脚手架,整理一个我自己初始化SpringBoot项目时的一个脚手架,便于后面查阅。因为SpringBoot的约定大于配置,在整合各个组件的时候,我们仅仅写很少的代码就能 整合 跑起来。

2020-08-12

ssm框架酒店管理系统.zip

基于spring+springmvc+mybatis 写的关于酒店管理的后端系统,实现后端对酒店管理相关信息的数据库增删改查操作。

2020-08-12

Javaweb学生信息管理系统.zip

基于jsp + servlet +Mysql 写的关于学生信息管理的后端系统,实现后端对学生、管理员、老师、课程信息的数据库增删改查操作。

2020-08-12

Javaweb学生宿舍管理系统.zip

基于jsp + servlet +Mysql 写的关于学生宿舍管理的后端系统,实现后端对学生宿舍管理信息的数据库增删改查操作。

2020-08-09

空空如也

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

TA关注的人

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