笔记
文章平均质量分 59
有裂痕的石头
埋头苦干,未来可期
展开
-
java17都快出了,为什么现在大多还在用java8
为什么现在都在用java8或者java11?下面是甲骨文官网截的图,可以看到,java8和java11都是LTS版本,LTS即Long-term_Support,就是长期支持版,从下图可以看到java8会一直被支持到2022年3月,它的扩展更是会到2030年12月,java11则会被一直支持到2023年11月,扩展回到2026年11月。像java8后边出来的好多版本比如下图中的java9,java10不是LTS版本,所以现在已经不被支持了。这就是为什么java17都快除了,现在大都还在用java8的原原创 2021-07-30 22:09:17 · 8095 阅读 · 4 评论 -
老师说过链表是分水岭,至少得会这些题目
目录1.删除链表中等于给定值 val 的所有节点在记录作者自己学习过程和解题时的思路方便复习的同时分享给其他同学们,如有错误或不足还请指正。1.删除链表中等于给定值 val 的所有节点题目链接:https://leetcode-cn.com/problems/remove-linked-list-elements/description/解法一:创建一条新链表,遍历旧链表,将不等于定值val的节点加入到新链表,...原创 2021-07-29 12:23:55 · 63 阅读 · 0 评论 -
什么是循环队列?循环队列及其实现,结合LeetCode第622题(设计循环队列)来介绍
如果对队列还有些疑问的可以线看一看我上一个博客:用Java描述数据结构之栈和队列,以及栈和队列的常用方法当我们只有一段固定大小空间去存一个队列时像这样:Front是队首,Rear是队尾,很明显这个空间已经满了,现在依次删除队首元素:可以发现随着队列内元素越来越少,没有用到的空间越来越大,且总空间大小不变,所以说到最后这段空间就算是废了。为了让这段空间可持续利用,我们其实可以这样:就是每次头删之后将队列中所有元素向前移,这就很好的解决了问题,完美的提升了空间的利用。可是,每头删一个元素都依次原创 2021-04-01 20:53:11 · 455 阅读 · 0 评论 -
用Java描述数据结构之栈和队列,以及栈和队列的常用方法
一般都是在学完线性表(顺序表和链表)之后,才会去学习栈和队列,因此可能会觉得栈和队列是一种新的数据结构,其实不然。它们逻辑上还是一对一的关系,所以说它们本质还是线性表,只不过是加了一定限制的线性表,具体加了哪些限制,且听我娓娓道来。栈这是一个线性表,我们可以对这个这个线性表内的任何一个元素进行需要的操作,我可以删掉既不是头也不是尾的[ 2 ]号元素,也可以在 [ 1 ]号位插入新的元素,就是说你对这个线性表里面的任何一个元素操作都是可以的,现在你把它放依次放到一个杯子里面。可以看到最先进去的[ 0原创 2021-04-01 00:30:47 · 223 阅读 · 2 评论 -
用Java实现一个简单的链表迭代器
迭代器有两个功能:boolean hasNext():查看是否还有下一个元素E next():返回当前元素先上代码这是迭代器所用到的节点类:public class MyListNode { public String val; public MyListNode prev; public MyListNode next; public MyListNode(String val){ this.val = val; }}迭代器类:public clas原创 2021-03-29 22:35:43 · 341 阅读 · 0 评论 -
用Java描述数据结构之线性表的链式存储(链表),模拟LinkedList实现
上一篇介绍了顺序表:用Java描述数据结构之线性表的顺序存储(顺序表),ArrayList及其方法的介绍上一篇博客中说明了什么是线性表——线性表就是一个个数据元素逻辑上以一对一的相邻关系(但是在物理结构上并不一定是连续得到)组织起来的有限序列。根据物理存储方式的不同可以将线性表分为两种,一种叫顺序表,一种叫链表,这篇博客主要介绍链表。链表和顺序表不同,链表在存储时并不是连续的,大家可以这么理解:内存上被使用的一段段空间之间会有小段的未被使用的,链表在使用时就可以使用这些小段的未被使用的空间去存储数据,原创 2021-03-29 22:01:36 · 306 阅读 · 0 评论 -
用Java描述数据结构之二叉树,前序遍历,中序遍历,后序遍历
什么是二叉树?一棵二叉树是节点的一个有限集合,该集合或者为空,或者是由一个节点加上两棵别称为左子树和右子树的二叉树组成。根据二叉树的概念,可以知道二叉树有以下两个特点:1.每个节点最多有两棵子树,即二叉树不存在度大于二的节点。2.二叉树的子树有左右之分,其子树的次序不能颠倒,因此二叉树是有序树。二叉树的基本形态:上图给出了几种特殊的二叉树形态,从左往右依次是:空树、只有根节点的二叉树、节点只有左子树、节点只有右子树,一般二叉树都是由上述基本形态结合而成。两种特殊的二叉树:满二叉树:一个二原创 2021-03-24 17:02:34 · 350 阅读 · 3 评论 -
用Java描述数据结构之线性表的顺序存储(顺序表),ArrayList及其方法的介绍
我们先来想一想什么是线性表?线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,但是把最后一个数据元素的尾指针指向了首位结点)。以上是百度百科中介绍的线性表,说白了线性表就是一个个数据元素逻原创 2021-03-21 21:39:05 · 281 阅读 · 0 评论 -
通过链表深入理解Java的引用和对象
在正式介绍重点内容以前,先给像我这样的初学者强调一下 " = " 在引用和对象应用中的作用:大致是 " = " 左边是引用," = " 右边是对象 (万变不离其宗,始终抓住这一点就好)。含义是让 " = " 左边的引用指向" = " 右边的对象 。链表作为一种线性表的数据结构,目的是将一组数据通过逻辑上相邻(线性),实际存储空间不相邻的方式组织起来,相比于顺序表,链表最大的好处是链表可以不必用一段完整的空间存储数据,这-相比于顺序表这大大提高了空间的利用率。C语言实现链表是通过指针(非静态链表)将一原创 2021-03-06 21:06:10 · 622 阅读 · 4 评论 -
重载(Overload)和重写(Overide)
重载(Overload)重载是在同一个类中对已有方法的再次编程,它的目的是在使用时能适应更多情况。这里拿构造函数举例理解:public class IdCard { public String name; public int age; public String sex; public String address; //一个形参 public IdCard(String name){ this.name = name;原创 2021-03-04 16:06:51 · 1299 阅读 · 5 评论 -
更高效地刷OJ——String常用方法(三)
续 更高效地刷OJ——String常用方法(二)contains() :这个方法用于查询传入的子串是否存在于字符串中,这个方法返回值是Boolean类型。通过代码理解:public static void main(String[] args) { String str = "Hello World"; //查询"o w"这个子串是否存在于字符串内 System.out.println(str.contains("o W")); /原创 2021-02-22 14:42:40 · 930 阅读 · 10 评论 -
更高效地刷OJ——String常用方法(二)
续 更高效地刷OJ——String常用方法(一).5.subString() :从字符串中切除一个子串,该方法有两个重载第一个是传入一个起始位置,返回从起始位置一直到结尾的子串第二个是传入一个起始位置,一个结束位置,返回从起始位置到结束位置长度的子串(左闭右开)通过代码理解: public static void main(String[] args) { String str = "我是中国人,我爱我的,我爱我的家乡,我爱我的学校,我爱我的家"; //这是一个空原创 2021-02-20 23:54:51 · 1421 阅读 · 8 评论 -
更高效地刷OJ——String常用方法(一)
因为常用方法较多,所以分为3篇1.length() : 返回字符串长度,此处的length有别于数组中的length数组中的length为属性,此处的length为方法。2.charAt() :将String类型变量视作一个字符数组,传入合法下标([ 0 , str.length() ) ),返回该下标位置字符。3.toCharArray() :将String类型变量拆解为一个字符类型数组。下面通过代码理解以上三种方法:import java.util.Arrays;public class M原创 2021-02-20 00:00:09 · 1337 阅读 · 13 评论 -
String常用构造方法
最常用的就是直接创建,相信大家都知道,并且很熟练了:public class Main { public static void main(String[] args) { String s; s = "hello"; s = s + " " + "world"; //相当于 s = "hello world" }}或者可以new一个新String对象public class Main { public sta原创 2021-02-19 15:12:52 · 821 阅读 · 3 评论 -
Java中static的作用
static作为一个关键字,它有它的使用范围:类的内部,方法的外部(static不能出现在方法的内部),这样看下来他能修饰的东西主要有以下几种 属性 | 方法 | 代码块 。属性,方法,代码块 一旦被static修饰之后就表示 自身与所在类实例化出的对象无直接关联,说到这里就得说一下类的作用了,类主要有两种作用:1.类可以作为实例化该类对象的蓝图 2.类可以容纳一类与实例化对象这个操作无关的东西,而这类东西就是被static修饰后的 属性 | 方法 | 代码块 ,也称为 静态属性 | 静态方法 | 静态原创 2021-02-17 11:44:36 · 1942 阅读 · 5 评论 -
关于Java静态属性初始化
Java中静态属性初始化的方式有两种:1.定义时初始化2.静态代码块中初始化当两种方式出现在同一个代码中,执行顺序就是代码中出现的先后顺序:public class Main { static { int a = 2; System.out.println("静态代码块"); } public static int b = shunXun(); public static int shunXun(){ Sy原创 2021-02-15 22:14:34 · 1999 阅读 · 1 评论 -
Java计算两日期相差天数源码
public class MyDate { public int year; public int month; public int day; //1.必须得校验传入参数的合法性 // year : 1 <= year // month : 1 <= month <= 12 // day : 1 <= day <= 每个月的天数 //2. 如果不符合,应该怎么办 // 抛异常 public My原创 2021-02-15 20:35:04 · 522 阅读 · 2 评论 -
Java对象初始化执行顺序
Java是面向对象的语言,需要把一个大的项目细化成相应的类,在通过一个个类实例化对象,实例化一般都要初始化属性,常见初始化属性的方式有以下几种定义时初始化class Person{ String name = "张三"; int age = 21;}2.代码块中初始化class Person{ String name ; int age ; { name = "张三"; age = 21; }}3.构造方法原创 2021-02-10 19:26:10 · 608 阅读 · 1 评论 -
Java默认值规则——各种数据类型的初试值是什么?
默认值规则指的就是不给变量赋值时,它自己初始化为默认值,不同数据类型默认值不同具体如下表所示:数据类型默认值booleanfalsechar" "(空格)byte0short0int0long0Lfloat0.0fdouble0.0d引用类型null在Java中基本数据类型作为局部变量时不享受默认值规则,说白了就是基本数据类型作为局部变量时不赋值不能使用(引用类型可以),如下所示:其他情况(数组,属性)都享受默原创 2021-02-07 01:13:05 · 719 阅读 · 2 评论 -
Java形参的改变不会影响实参
这篇文章就是想说一个结论,结论就是标题 —— Java形参的改变不会影响实参下面通过代码来理解这个结论。public class Main { public static void main(String[] args) { int a = 10; int b = 20; System.out.println("交换前a = " + a); System.out.println("交换前b = " + b);原创 2021-02-06 19:13:20 · 1379 阅读 · 9 评论 -
IDEA常用快捷键
一、Ctrl 快捷键快捷键作用是否常用Ctrl + F在当前文件进行文本查找√Ctrl + R在当前文件进行文本替换√Ctrl + Z撤销√Ctrl + Y删除光标所在行 或 删除选中的行√Ctrl + X剪切光标所在行 或 剪切选择内容√Ctrl + C复制光标所在行 或 复制选择内容√Ctrl + D复制光标所在行 或 复制选择内容,并把复制内容插入光标位置下面√Ctrl + W递进式选择代码块。可选中光标所原创 2021-02-06 13:09:49 · 651 阅读 · 0 评论 -
Java通过引用操作对象的“共享”特性
先来理解一下引用和对象的关系:对于任何引用类型直接创建的变量都是一个引用,这个引用指向这个类型的对象,数据是存在对象中的,对数据的操作实质是通过引用找到对应的对象,在对对象中的数据进行操作。通过代码理解通过引用操作对象的“共享”特性:public class Main { public static void main(String[] args) { int[] a = { 1, 2, 3, 4, 5 }; int[] b = a; b[0] =原创 2021-02-06 12:28:39 · 490 阅读 · 0 评论 -
Java关键字——final的用法
final这个单词的意思是“最终的; 不可改变的”总的来说,在java中被final修饰的都是不想在后续程序中改变的。在Java中final主要有以下几个用处:1、修饰变量的定义(此处的变量主要指:静态变量、属性、局部变量、形参变量):对于静态变量,属性来说,用final修饰后,他们只允许被赋值一次,且这一次必须是在声明时就进行,就是说不能先在一个语句中声明一个变量,然后在后续语句中赋值,只能在声明变量的同时对变量赋值(在同一个语句中)对于局部变量来说,在声明时用了final修饰,那么只允许被赋值原创 2021-01-30 17:31:26 · 621 阅读 · 6 评论 -
Java访问修饰符——用于控制可见性
在Java中有下面几个地方需要用到访问修饰符的:一、访问修饰符 class 类名 {…}这个地方可以用public修饰,也可以不用任何修饰符。二、在类的内部 :1. 修饰方法2. 修饰属性(成员变量)3. 修饰构造方法这些地方可以用public/protected/private修饰,也可以不用任何修饰符不同修饰符修饰,能被访问的范围就不同:(范围从小到大)1、仅对本类可见 ——— private 。2、对本包可见 ——— 不用任何修饰符即可 。3、对本包和所有子类可见 ——— p原创 2021-01-30 01:22:40 · 725 阅读 · 1 评论 -
Java命名规范(建议收藏)
一、 所有命名规范都必须遵循以下规则: 1、名称只能由字母、数字、下划线、$符号组成 2、不能以数字开头 3、名称不能使用JAVA中的关键字 4、坚决不允许出现中文及拼音命名二、命名规范:1、项目名称全部用小写2、包名全部用小写3、 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。如: public class MyBinarySearch {}4、变量名、方法名首字母小写,如果名称由多个单词组成,除首单词外其余单词的首字母都要大写(驼峰命名法)如:int l原创 2021-01-28 18:53:16 · 3364 阅读 · 9 评论 -
Java中大数值是什么?数值想存多大存多大
如果我们常用的整数和浮点数不能满足需求时,java.math包中有两个很有用的类:BigInteger 和 BigDecimal 。这两个类可以处理任意长度数字序列的数值,就是说有了这两个类,想存多大数就能存多大。但是我们不能用平常用的算数运算符(+或者*等)来处理大数值,而是需要它专用的方法,需要注意的是大数值不能直接跟普通数值计算,我们可以使用 valueOf 方法将普通数值转换为大数值,具体请看下面代码理解:这段代码用BigInteger类进行演示,BigDecimal类使用方法相同,不过就是B原创 2021-01-26 00:57:20 · 604 阅读 · 0 评论 -
Java 数组的拷贝(复制一个相同数组)
在上一篇博客中,浅谈了 关于 java 中数组的创建,遍历,打印相关问题,这一篇想谈一谈 java 中 数组的拷贝 问题,C语言中数组是直接在内存上给相应变量一定大小的空间,对数组的赋值,改变是直接在内存层面操作的,但是在java中因为数组是一种引用类型,创建一个数组本质是创建了一个 相应类型的对象,对数组的操作也只是通过引用对对象中相应数据的改变。C语言中要复制一个数组就先要创建另外一个数组,在通过对数组的遍历,依次将第一个数组每个元素赋值 到 第二个数组中,java中也可以这样操作。 public原创 2021-01-25 00:08:43 · 1046 阅读 · 0 评论 -
java 中数组的创建 数组遍历 以及数组的输出(打印)
什么是数组?如果我们需要创建一个 int 类型变量,那么我们只需要 int a;如果我们需要创建五个 int 类型变量,那么我们只需要int a1; int a2; int a3;int a4; int a5;那我们需要创建一百个int 类型变量呢? int a1; int a2; int a3; int a4;int a5;int…这种时候我们就需要创建一个数组,说白了数组是一种数据结构,是用来储存相同类型数据的有限集合。java中数组的创建很多同学都是从C语言开始接触编程的,C语言中原创 2021-01-24 21:45:29 · 5571 阅读 · 0 评论 -
C语言sizeof和strlen的含义,用法和区别
目录strlen( )strlen( )的含义sizeof( )strlen( )strlen( )的含义strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)这是百度百科给出的strlen()的含义,说白了strlen()就是一个放在string.h这个头文件中的一个函数,其原型为: unsigned int strlen (char *s),原创 2020-12-21 20:47:31 · 873 阅读 · 0 评论 -
C语言转义字符 转义序列(内含\ddd \xhh 含义)
目录转义字符" \ddd \xhh " 的用法转义字符转义字符是很多程序语言、数据格式和通信协议的形式文法的一部分。对于一个给定的字母表,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义。因此转义字符开头的字符序列被叫做转义序列。这是百度百科给出的转义字符定义,说白了就是有些东西你没有办法直接输入,而转义字符就可以解决这个问题。转义序列通常有两种功能。第一个是编码一个句法上的实体,如设备命令或者无法被字母表直接表示的特殊数据。第二种功能,原创 2020-12-20 23:57:21 · 8670 阅读 · 1 评论 -
浅谈C语言static关键字 静态变量 函数
目录static对变量修饰局部变量全局变量函数static对变量修饰局部变量普通局部变量存储于进程栈空间,使用完毕会立即释放。静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。普通局部变量未赋值时,打印出来的是变量对应内存中以前的数据,(因为内存中的数据不能删除,只能覆盖,给变量赋值的过程就是覆盖数据的过程),而静态局部变量(用static修饰的变量,例如:static int i;)在声明时编译器会自动给他赋值0。不管是普通局部变量还是静态局部变量,作用域皆为局部作用域原创 2020-12-09 12:53:54 · 649 阅读 · 0 评论