自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 反射枚举及lambda的使用

一、反射

2022-04-24 20:38:19 500

原创 数据结构之Map和Set总结

一、概念与模型1.概念:Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有: ①直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢 ②二分查找,时间复杂度为O(logN),但搜索前必须要求序列是有序的 。上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作了,而现实中的查找比如: ①根据姓名查询考试成绩 ②通讯录,即根据姓名查询联系方式 ③不重复集合,即需要先搜索关键字是否已经在集合中,可能在查找时进行一些插入和删除的

2022-04-23 12:17:42 2403

原创 数据结构之泛型总结

目录一、泛型类的引出二、泛型类的定义和使用三、泛型的编译四、泛型的上界五、泛型方法六、通配符1.什么是通配符:2.通配符可以解决的泛型问题:3.通配符的上界4.通配符的下界一、泛型类的引出1.什么是泛型一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。泛型是在JDK1.5引入的新的语法,通俗讲,泛型:就是适用于许多类型。从代码上讲,就是对类型实现了参数化。

2022-04-20 21:41:05 650

原创 数据结构之排序

一、概念1.排序排序:就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。通常意义上的排序,都是指的原地排序(in place sort)2.稳定性两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法是具备稳定性的排序算法3.常见基于比较的排序总览二、插入排序1.原理:整个区间被分为①有序区间②无序区间,每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入。过程如图所示:就拿12 5 9 4 10这组数据为例

2022-04-19 22:15:20 856

原创 数据结构之优先级队列(堆)

一、二叉树的顺序存储使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中。 一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。 这种方式的主要用法就是堆的表示。如图所示:下标的一些关系:已知双亲(parent)的下标,则: 左孩子(left)下标 = 2 * parent + 1; 右孩子(right)下标 = 2 * parent + 2; 已知孩子(不区分左右)(child)下标,则: 双亲(parent...

2022-03-29 12:07:50 4730

原创 Java对象的比较

一、基本类型的比较

2022-03-28 22:49:33 2771

原创 二叉树前中后序的非递归遍历

目录一、前序非递归遍历二、中序非递归三、后序非递归我们先分析前序的非递归遍历,中序和后序与此类似。我们也可以用迭代的方式实现方法一的递归函数,两种方式是等价的,区别在于递归的时候隐式地维护了一个栈,而我们在迭代的时候需要显式地将这个栈模拟出来,其余的实现与细节都相同。一、前序非递归遍历前序遍历:根->左->右class Solution { public List<Integer> preorderTraversal(TreeNode r

2022-03-26 14:48:23 435

原创 平衡二叉树

一、题目二、思路1.一棵树要是平衡二叉树,那么它的每颗子树都要是平衡二叉树2.root左树的高度-右树的高度<=1时间复杂度:O(n^2),其中 n是二叉树中的节点个数。最坏情况下,二叉树是满二叉树,需要遍历二叉树中的所有节点,时间复杂度是 O(n)。对于节点 p,如果它的高度是 d,则 height(p) 最多会被调用 d 次(即遍历到它的每一个祖先节点时)。对于平均的情况,一棵树的高度 h 满足 O(h)=O(logn),因为 d≤h,所以总时间复杂度为 O(nlogn)。

2022-03-25 23:14:19 1005

原创 另一棵树的子树

一、题目二、思路1.先判断两棵树是不是两颗相同的树2.如果不是,那么分别判断subRoot是不是root的左子树或者右子树(换句话来说,就是,subRoot和root的左子树或右子树是不是同一颗树)三、代码实现class Solution { private boolean isSameTree(TreeNode p, TreeNode q) { if(p == null && q == null){ retur.

2022-03-24 23:38:37 192

原创 检查两棵树是否相同

目录一、题目二、思路三、代码实现一、题目二、思路1.如果两个二叉树都为空,则两个二叉树相同2.如果两个二叉树中有且只有一个为空,则两个二叉树一定不相同3.如果两个二叉树都不为空,那么首先判断它们的根节点的值是否相同,若不相同则两个二叉树一定不同,若相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同三、代码实现class Solution { public boolean isSameTree(TreeNode p, TreeNode q) {

2022-03-23 22:56:47 3294

原创 数据结构之二叉树

一、树形结构

2022-03-22 22:18:28 772

原创 用栈实现队列

目录一、题目二、思路三、代码实现一、题目二、思路1.入队的时候统一入到第一个栈2.出队的时候统一出第二个栈的元素,如果第二个栈为空,那么就把第一个栈里面的所有元素导过来,然后再出栈顶元素三、代码实现class MyQueue { public Stack<Integer> stack1; public Stack<Integer> stack2; public MyQueue() { sta..

2022-03-20 13:13:54 259

原创 用队列实现栈

目录一、题目二、思路三、代码实现一、题目二、思路1.入栈的时候,入到不为空的队列,刚开始都为空指定入到一个队列2.入栈的时候,找到不为空的队列,出size-1个元素到另一个队列中,剩下的这个元素就是出栈的元素如图所示:三、代码实现class MyStack { private Queue<Integer> qu1; private Queue<Integer> qu2; public MyStack() {

2022-03-19 09:17:09 1186

原创 数据结构之队列

目录一、什么是队列Queue二、Queue的一些方法三、什么是双端队列Deque四、Deque的一些方法五、队列Queue的实现六、循环队列一、什么是队列Queue1.队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 2.入队列:进行插入操作的一端称为队尾(Tail/Rear)3.出队列:进行删除操作的一端称为队头(Head/Front)二、Queue的一些方..

2022-03-18 11:46:27 322

原创 数据结构之栈

一、栈的概念1.栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则2.压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶3.出栈:栈的删除操作叫做出栈。出数据在栈顶4.别的一些栈:(1)虚拟机栈(JVM Stack): 一块具有栈的特性的内存,重点是存储局部变量表(当然也有其他信息) 栈帧:在调用函数时...

2022-03-15 21:38:00 823

原创 实现最小栈

一、题目二、思路三、代码实现class MinStack { private Stack<Integer> stack; private Stack<Integer> minStack; public MinStack() { stack = new Stack<>(); minStack = new Stack<>(); } public void .

2022-03-15 21:36:37 309

原创 有效的括号匹配

目录一、题目二、思路三、代码实现一、题目二、思路1.有三种考虑的方向:(1)(()左括号多(2)())右括号多(3)([)]左右括号不匹配2.使用栈来实现本题(1)如果遇到左括号就入栈(2)如果遇到右括号,就比较栈顶元素和当前的右括号是否匹配,如果匹配则出栈(3)因为栈当中存储的左括号,当遍历完整个字符串,栈还是不为空的,则左括号多,否则右括号多三、代码实现class Solution { public boolean isValid

2022-03-15 21:03:29 508

原创 栈的压入、弹出序列

一、题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。1. 0<=pushV.length ==popV.length <=10002. -1000<=pushV[i]<=10003.pushV的所有数字均不相同示例1输入:[1,...

2022-03-06 23:56:36 147

原创 逆波兰表达式

目录一、题目描述二、思路三、代码实现一、题目描述二、思路三、代码实现class Solution { public int evalRPN(String[] tokens) { Stack<Integer> stack = new Stack<>(); for(int i = 0; i < tokens.length; i++){ String val = to.

2022-03-06 23:13:44 115

原创 Java顺序表之杨辉三角

目录一、题目二、思路三、代码实现一、题目二、思路三、代码实现import java.util.ArrayList;import java.util.List;class Solution{ public List<List<Integer>> generate(int numRows){ List<List<Integer>> ret = new ArrayList<>();..

2022-02-28 20:22:56 141

原创 数据结构之List

一、初始泛型1.我们之前实现过一个顺序表,但是那个顺序表只能存放一种数据类型,不通用,我们也已知 Object 是 java 中所有类的祖先类,所以我们可以对之前的顺序表稍微改改,改成什么都可以放的class MyArrayList{ private Object[] elem; private int usedSize; public MyArrayList(){ this.elem = new Object[10]; } public

2022-02-28 19:48:22 2083

原创 数据结构之集合框架

目录一、什么是集合二、接口interface1.Collection常用方法说明2.Map接口使用示例常用方法说明一、什么是集合Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes 。 其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索retrieve 、管理 manipu.

2022-02-22 19:57:12 492

原创 JavaSE之认识String类

一、创建字符串1、字符串是不能被继承的;String是一个引用类型注意:java中的字符串和C语言不一样,java中的字符串没有所谓的‘\0’结尾2.创建方式:// 方式一String str = "Hello Bit";// 方式二 调用构造方法进行构造对象String str2 = new String("Hello Bit");// 方式三char[] array = {'a', 'b', 'c'};String str3 = new String(array)

2022-02-15 17:10:58 392

原创 JavaSE之认识异常

目录一、什么是异常二、异常的好处三、捕获异常1.基本语法2、一些注意事项3.异常处理流程4.抛出异常5.异常说明6.关于finally的注意事项四、Java异常体系五、自定义异常类 一、什么是异常1、所谓异常指的就是程序在 运行时 出现错误时通知调用者的一种机制注意:有些错误是这样的, 例如将 System.out.println 拼写错了, 写成了 system.out.println. 此时编译过程中就会出错, 这是 "编译期" 出错.而运行.

2022-02-14 22:21:42 235

原创 JavaSE之面向对象编程(2)

一、抽象类1.概念打印图形class Shape{ public void draw(){ System.out.println("Shape::draw()"); }}class Rect extends Shape{ @Override public void draw(){ System.out.println("♦"); }}class Flower extends Shape{ @Override public

2022-02-12 17:25:17 338

原创 JavaSE之面向对象编程(1)

一、包1.什么是包包 (package) 是组织类的一种方式. 使用包的主要目的是保证类的唯一性2.导入包中的类Java 中已经提供了很多现成的类供我们使用,如:public class Test { public static void main(String[] args) { java.util.Date date = new java.util.Date();// 得到一个毫秒级别的时间戳 ...

2022-02-11 13:38:14 218

原创 JavaSE之顺序表与链表的总结

一、线性表

2022-02-09 23:12:26 565

原创 JavaSE之时间复杂度与空间复杂度总结

目录一、算法效率二、时间复杂度1.概念2.大O的渐进表示法3.一些常见的例子三、空间复杂度1.概念2.一些常见的例子一、算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以.

2022-02-04 15:31:18 331

原创 JavaSE之类和对象的总结

目录一、初步认识类和对象二、类的成员1.字段2.方法3.static 关键字三、封装1.什么是封装2.private实现封装3.getter和setter方法四、构造方法五、代码块六、内部类1.内部类的概念和分类:2.本地内部类3.实例内部类4.静态内部类5.匿名内部类七、补充1.toString方法:2.匿名对象一、初步认识类和对象1.C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步...

2022-02-03 22:19:45 558

原创 JavaSE之数组总结

一、数组基本用法1.什么是数组数组本质上就是让我们能 "批量" 创建相同类型的变量,在 Java 中, 数组中包含的变量必须是相同类型2.数组的创建(1)动态初始化:数据类型[] 数组名称 = new 数据类型 []{ 初始化数据 };new:一个关键字,实例化一个对象,这说明数组是一个对象如:int[] arr = new int[3];//创建了一个长度为3的数组 int[] arr = new int[]{1,2,3};//创建了一个长度为3的数组并且初始...

2022-02-02 18:15:40 577

原创 JavaSE之方法的使用的总结

一、方法的基本用法1.什么是方法方法就是一个代码片段. 类似于 C 语言中的 "函数”。其存在的意义:(1)是能够模块化的组织代码(当代码规模比较复杂的时候)(2)做到代码被重复使用, 一份代码可以在多个位置使用(3)让代码更好理解更简单(4)直接调用现有方法开发, 不必重复造轮子2.方法的定义public static 方法返回值 方法名称([参数类型 形参 ...]){ 方法体代码; [return 返回值];}注意:(

2022-01-31 14:03:11 560

原创 JavaSE之逻辑控制总结

目录一、顺序结构二、分支结构1.if语句2.switch语句:三、循环结构1.while循环2.for循环3.do-while循环四、输入输出1.输出到控制台2.从键盘输入一、顺序结构程序执行的顺序和代码执行的顺序有关public class LogicalLearning{ public static void main(String[] args){ System.out.println("aa"); Sy

2022-01-29 20:02:12 399

原创 JavaSE之数据类型和运算符的总结

目录一、数据类型1.变量和类型2.整型类型int3.长整型long4.双精度浮点型变量double5.单精度浮点型变量float6.字符类型变量char7.字节类型变量byte8.短整型变量short9.布尔类型变量boolean10.字符串类型变量11.变量的作用域12.变量的命名规则13.常量14.类型转换15.数值提升16.int和string的相互转换总结:二、运算符1.算术运算符2.关系运算符3.逻辑运算符..

2022-01-28 22:44:39 498

原创 C语言之文件操作的总结

一、什么是文件在操作系统中,文件是指驻留在外部介质(如磁盘等)中的一个有序数据集,可分为程序文件、数据文件(从文件功能的角度来分类的)。(1)程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。(2)数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。数据文件还可分为各种类型,如:文本文件,图像文件,声音文件......二、为什么使用文件...

2022-01-27 20:30:23 1425

原创 C语言之位段、枚举和联合总结

目录一、位段1.什么是位段2.位段的内存分配3.位段的跨平台问题二、枚举1.什么是枚举2.枚举的声明3. 枚举类型的定义4.枚举类型的初始化5.枚举的优点三、联合(共用体)1.什么是联合2.联合的声明3.联合的定义4.联合大小的计算一、位段1.什么是位段位段和结构是类似的,但是有两个不同: ①位段的成员必须是 int、unsigned int 、signed int或者是 char (属于整形家族)类型 。 ②位段的成员名后..

2022-01-25 12:03:46 520

原创 C语言之结构体的总结

目录一、什么是结构二、结构的定义三、结构体变量的定义和初始化四、结构的自引用五、结构变量的使用1.结构变量成员的引用2.结构变量的整体赋值3.结构变量作为函数参数六、结构指针七、结构数组八、结构体内存对齐1.计算结构体大小2.为什么内存的对齐九、修改默认对齐数一、什么是结构C语言c语言的内置类型:char,short,int,long,float,double;自定义类型:结构体,枚举,联合体结构类型是一种允许程序员把一些数据分量聚合成一.

2022-01-23 20:46:38 2877

原创 C语言之动态内存分配总结

目录一、为什么存在动态内存分配二、动态内存函数的介绍1.malloc和free2.calloc3.realloc三、常见的动态内存错误1.对NULL指针进行解引用操作2.对动态开辟空间的越界访问3.对非动态开辟内存使用free释放4.使用free释放一块动态开辟内存的一部分5.对同一块动态内存多次释放6.动态内存开辟忘记释放(内存泄漏)四、一些经典题五、C/C++程序的内存开辟六、柔性数组一、为什么存在动态内存分配以前的空间开辟如:int.

2022-01-23 14:46:48 2567

原创 C语言之内存函数总结

目录一、内存拷贝函数memcpy():二、内存拷贝函数memmove():三、内存比较函数memcpy():四、内存设置函数memset():一、内存拷贝函数memcpy():void *memcpy( void *dest, const void *src, size_t count );1.引用头文件<memory.h> or <string.h>2.函数memcpy从src的位置开始向后复制count个字节的数据到dest的内存位置。3...

2022-01-21 22:32:18 1394 1

原创 C语言之字符串、字符串函数和字符函数总结

前言字符串是C语言中最有用、最重要的数据类型之一,本文是对字符串、字符串函数笔记的总结。一、字符串1.字符串常量(字符串字面量):用双引号括起来的内容。字符串的结束标志是一个 \0 的转义字符。双引号中的字符和编译器自动加入末尾的\0字符,都作为字符串存储在内存中。如果字符串常量之间没有间隔,或者用空白字符分隔,C将其视为串联起来的字符串常量。如:char greeting[50] = "Hello,and""how are""you" ...

2022-01-21 13:29:28 968

原创 C语言之指针总结(2)

前言本文是对指针和数组的一些题的归纳。一、一维整型数组#include <stdio.h>int main(){ int a[] = {1,2,3,4}; printf("%d\n",sizeof(a));//16 sizeof(a)算的是数组的大小 printf("%d\n",sizeof(a+0));//4/8 sizeof(a+0)不是sizeof(a),所以此处不属于那两种特殊情况,此处的a是数组首元素的地址,地址的大小在32位(大小为

2021-12-28 22:22:26 569

空空如也

空空如也

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

TA关注的人

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