自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CodingLJ

种树最好的时机是十年前,其次是现在。

  • 博客(40)
  • 收藏
  • 关注

原创 【最全】Java中Map集合遍历的方式

Map集合的遍历方式 先看下Map集合的部分源码:package java.util;import java.util.function.BiConsumer;import java.util.function.BiFunction;import java.util.function.Function;import java.io.Serializable;public interface Map<K,V> { /** * Returns .

2021-03-31 22:29:11 253 1

原创 【彻底理解】为什么重写equals方法后,必须要重写hashcode方法?

一、基本知识1、equals:比较的是两个对象是否相等,包括对象的内容、对象的地址是否相等。判别的依据是equals两端比较的类中是否重写了equals方法。 对象的地址、对象的值(内容)是两个不容的概念。地址是存储值的地方,地址相当于对象在内存中的一块区域,该区域给它编上号。值相当于该区域存储的东西。 ①对象相等,比较的是内存中存放的对象的内容是否相等。 ②引用相等,比较的是对象指向的内存地址是否相等。 当使用equals方法的时候,需...

2021-03-30 19:48:31 1223

原创 【绝对经典】Java面试题七:== 和equals之间的区别

1、 == :作用是判断两个对象的地址是否相等,相等的话返回true。或者说两个对象是不是同一个对象。 ① 如果变量的类型是基本数据类型,则比较是值,比如:int a = 2;int b=2; a== b。 ② 如果比较的是引用数据类型,则比较的是对象内存地址是否一样,一样返回的true,不一样返回的是false2、 equals:作用是判断两个对象是否相等。有两种情况: ① 如果类没有重写equals()方法,则比较的是两个对象是不是同一个对象,等价于...

2021-03-29 23:57:31 381 2

原创 【注释详细,思路清晰】【打卡第4天】leetcode热题HOT100之Java实现:173. 二叉搜索树迭代器

1、题目描述二叉搜索树迭代器实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。int next()将.

2021-03-28 23:53:25 125

原创 【经典设计模式】一、单例设计模式

1、前言 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案。设计模式代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的一段时间的经验和错误总结出来的。设计模式的本质就是提高软件的维护性,通用性和扩展性,并降低软件的复杂度。 简单的说,就是前辈们在遇到一些问题和经验总结出来的,面对不同的问题,有不同的解决方案,且对症下药。使问题解决,效率提高,提高了程序的安全性、健壮性、可靠性等。2、设计模式类型 ...

2021-03-28 22:02:18 209

原创 【注释详细,思路清晰】【打卡第3天】leetcode热题HOT100之Java实现:61、旋转链表,给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

1、题目描述旋转链表给你一个链表的头节点head,旋转链表,将链表每个节点向右移动k个位置。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]示例 2:输入:head = [0,1,2], k = 4输出:[2,0,1]2、算法分析① 将链表的每个结点向右移动k个位置,关于k讨论如下: 旋转链表,本质上就是将尾部向前数,第K个元素作为头部,原来的头部元素接在尾上 至于往右移动,共有两种情...

2021-03-27 14:39:05 517

原创 【注释详细,思路清晰】【打卡第2天】leetcode热题HOT100之Java实现:94、二叉树的中序遍历(使用栈)

1、题目描述 二叉树的中序遍历(使用栈)给定一个二叉树的根节点 root ,返回它的 中序遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]2、算法分析 ① 二叉树的中序遍历,使用栈辨别二叉树的结点和集合List存储二叉树中结点的值 ② 当栈不空,因为初始栈都是空的,说明栈中是存储元素的;当前结点不为空的时候遍历 ③ 当当前结点不为空的时候,遍历其左孩子,然后入栈 ④ 当当前结点为空的时候,从栈中出栈元素,继续遍历...

2021-03-26 23:46:18 108 1

原创 【图解 + 注释详细】【打卡第1天】leetcode算法HOT热题之Java实现:83. 删除排序链表中的重复元素

1、题目描述删除排序链表中的重复元素。存在一个按升序排列的链表,给你这个链表的头节点head,请你删除所有重复的元素,使每个元素只出现一次。返回同样按升序排列的结果链表。示例 1:输入:head = [1,1,2]输出:[1,2]2、算法分析 ① 首先判断head是否为空,head.next是否为空 ② 判断链表中相邻元素是否相等,相等的话,head指向head.next,指向重复元素,判断重复元素和下一个元素是否相等,继续往下 ③ 判断如果...

2021-03-26 23:06:40 110

原创 【图解】leetcode热题HOT100之Java实现:有效的括号,栈匹配括号

1、题目描述给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:① 左括号必须用相同类型的右括号闭合。② 左括号必须以正确的顺序闭合。2、算法思想 ① 使用栈存储匹配括号的相对应匹配括号 ② 遍历字符串,预定将对应的括号放入栈中,然后遍历出的值和栈顶的值做对比 ③ 返回栈的true或者false; 1,如果遇到了左括号,就把对应的右括号压栈(比如遇到了字符'(',就把字符')'压栈)...

2021-03-26 00:09:20 239

原创 【详解】使用Java计算类中对象的个数,实现每次new一个对象,计算对象的个数

先看代码:代码解释: 因为static修饰变量的时候是属于全局变量,在内存里面只有一个副本,static修饰的变量不可以使用this关键字来获取值,这边的this代表当前类的对象或者属性,而且static修饰的变量是共享的,只有一个本体。每次创建一个对象的时候,类的无参构造方法就会执行一次,所以初始值private static int count = 0,每多new一个对象,count就会 +1。而使用private int count 中的count是非静态变量,通过对象来获取...

2021-03-24 20:04:28 3190 1

原创 Java面试题六:关于Java容器List、Set、Map,知多少?为什么HashMap扩容是2的倍数?

一、概述Java容器分为List、Set、Map,他们都是Collection接口的实现类。Java集合框架主要包含两种类型的容器,一种是集合(Collection),存储元素的集合;另一种是Map,存储键值对映射。接口Collection包含3中类型接口:List、Set、Queue,具体常用的实现类包括:ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等。层级如下:二、具体容器介绍1、List.

2021-03-23 20:58:23 296 1

原创 《剑指Offer》之Java实现:输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

1、题目描述 输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。2、算法分析 ① 从根节点开始遍历,依次遍历到叶子结点,判断每个结点的值的和是否为target ② 注意,可以使用 target = target - 结点.val,然后计算剩余的值3、代码实现(注释详细)import java.util.ArrayList;/**public clas...

2021-03-23 16:28:37 383

原创 【经典详解】《剑指Offer》之Java实现:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))

1、题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))2、算法分析 ① 题目要求构造栈的相关函数,然后求使用栈求最小值,可以定义两个栈,一个栈保存当前栈的元素,就是一个正常的栈,记为stackData;另一个栈用于保存入栈元素每一步比较的最小值,这个栈记为stackMin。 ② 压栈数据规则(push): 假设当前数据为node,先将其压入stackData,然后判断stackMin栈是否为空;如果为空,将node也压入s...

2021-03-22 13:20:16 155

原创 【注释详细】《剑指Offer》之Java实现:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

1、题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。2、算法思想以及知识点补充算法思想: ① 二叉树遍历每一层,把每一层的结点存储到队列中 ② 然后对每一层的结点进行遍历 ③ 每一层的遍历的结果添加到建好的集合中 ④ 最后将把每层的元素添加到大集合中 Queue 中 add() 和 offer()都是用来向队列添加一个元素。 在容量已满的情况下,add() 方法会抛出Illega...

2021-03-22 11:11:17 216

原创 【注释详细】《剑指Offer》之Java实现:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

1、题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)2、算法思想 ① 遍历小树是否是大树的一个子树,首先得从大树和小数的根节点进行遍历 ② 两个方面,遍历大树和判断大数和子树的结点 具体看代码吧,注释详细!3、代码实现public class Solution { public static boolean HasSubtree(TreeNode root1, TreeNode root2) {...

2021-03-21 11:52:05 151

原创 【注释详细】《剑指Offer》之Java实现:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。

1、题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任一一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1。2、算法分析 ① 题目的意思是查询出数组中重复的元素,如果有查询出来;如果没有,返回-1; ② 可以使用集合工具Set:Set集合中的元素是不允许有重复的,且无序;3...

2021-03-20 13:28:51 693

原创 【注释详细】《剑指Offer》之Java实现:输入一棵二叉树,判断该二叉树是否是平衡二叉树。

1、题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。首先说一下,什么是平衡二叉树? ① 可以是空树 ② 如果不是空树,任何一个结点的左子树和右子树都是平衡二叉树,并且高度之差的绝对值不超过1。...

2021-03-19 21:56:26 222

原创 【图解】《剑指Offer》之Java实现:操作给定的二叉树,将其变换为源二叉树的镜像。

1、题目描述操作给定的二叉树,将其变换为源二叉树的镜像。比如: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 52、算法思想 ① 首先判断根节点是够为空,根...

2021-03-19 18:31:26 116

原创 【详解】JVM中,编译器和解释器的作用和区别

一、前言 随着互联网的发展,现在虚拟机地表最稳定,最强的默认是Hotspot虚拟机。先查看下:查看方式:cmd进行黑框框,然后输入:java -version会出现以下参数:java version:当前java语言运行的JDK版本好Java(TM) SE Runtime Environment (build 1.8.0_261-b12):java运行环境之前的JVM包含了两种JVM的实现,一种是客户端的,一种是服务端的。现在已经把Client VM忽略掉了java ...

2021-03-18 15:31:41 3203 1

原创 Java面试题五:什么是串行,并行,并发,同步,异步?

①并发: 并发编程又叫多线程编程,并发的实质是一个物理上的CPU在若干道程序之间多路复用,有限的资源多用户共享提高效率。任务数多余CPU的核数,通过操作系统的任务调度算法,实现多个任务一起执行的。一个CPU不可能真正同时运行一个一个以上的线程,只能把CPU的时间分为多个时间段,再将各个时间段分给多个线程执行,其他线程处于挂起状态,这种方式称为并发。②并行: 两个或者两个以上的事件或者活动在同一时刻发生。多道程序的环境下,允许程序同一时刻在不同的CPU同时执行。当系统有一个以上...

2021-03-16 19:16:14 982

转载 Java面试题四:String,StringBuffer,StringBuilder之间的区别

String,StringBuffer,StringBuilder都是代表字符串。 String类是不可变的类,任何让String类的改变都会让String类产生一个新的对象。 StringBuffer是可变类,任何StringBuffer字符串的改变都不会产生一个新的对象。StringBuffer是String字符串的一个缓冲区,对于String来说,StringBuffer是可以改变的,StringBuffer是线程安全的。有几个线程同时操作StringBuffer序列,所有...

2021-03-16 17:54:54 185

原创 【详解】Java实现二分查找(折半查找)

1、概述思想 二分查找又称折半查找,优点是比较的次数少,查找速度快,但是要求待查找的序列是有序的。升序的数据集合,先找出升序集合中最中间的元素,将数据集合划分为两个子集,将最中间的元素和关键字key进行比较,,如果等于key则返回,如果大于关键字key,则在前一个数据集合中查找,否则在后一个子集中查找,直到找到为止,如果没找到则返回-1;2、算法思想① 首先确定整个查找区间的中间位置mid=low + (high - low)/2;② 用待查关键字值与中间位置关键字值进行比较;...

2021-03-16 15:24:47 695

原创 【经典】java实现经典排序、查找算法(陆续updating......)

① 快速排序:https://blog.csdn.net/Sunshineoe/article/details/114877265② 选择排序:https://blog.csdn.net/Sunshineoe/article/details/114828671③ 插入排序:https://blog.csdn.net/Sunshineoe/article/details/114819634④ 冒泡排序:https://blog.csdn.net/Sunshineoe/article/det...

2021-03-16 14:06:05 92

原创 【详解】Java实现快速排序

1、概述 快速排序怎么排序的?为什么叫做快速排序?速度快? 快速排序采用分治的思想,通过一趟快速排序将待排序列分为两个部分,其中的一部分记录比关键字小的元素,另一部分记录比关键字大的元素,知道达到整个序列有序的目的。具体思想:① 在待排序序列中取出一个元素作为基准,称为基准记录② 定义两个索引left和right,分别表示 首索引和尾索引,key为基准值③ 首先,尾索引向前扫描,找到比基准值小的记录,并替代首索引对应的值④ 然后,尾索引向后扫描,直到找到比基准值大的...

2021-03-16 13:54:40 474

原创 【已经解决】网页按F12转开发者模式,看不到请求头Headers信息

1、按F12,出现以下页面,此时是看不到请求头的信息的2、接下来按住漏斗形状的图标3、接下来出现了请求头的信息Headers

2021-03-15 21:55:50 10227 3

原创 【详解】Java实现选择排序

1、概述 什么是选择排序?思想:每一趟从待排序的记录中选择最小的元素,放到已排序序列的末尾,再从剩下的序列中选择最小的元素放到已排好序序列的末尾,直到整个序列排序完成。注意点: ① 比较的趟数:序列中从第二个元素开始和第一个元素比较,直到最后一个元素和到第二个元素比较。比如,1,3,2 1和3比较,1和2比较,第一趟比较结束;3再和2比较,交换位置,第二趟比较结束。所以整个序列比较的趟数是n-1,n是arr.length。 ② 内层循环是从第二个元素开始到数组的最后一个元素...

2021-03-15 13:29:00 598

原创 【区别】for循环中i<array.length;i<array.length-1;i<=array.length;i<=array.length-1

最好的方法就是自己去编辑器测试一遍注意点: ① 数组下标是从0开始,数组下标的范围是[0,arr.length-1],比如数组int[] arr = {1,2,3,4},数组的长度,arr.length=4,则数组下标的范围是[0,3] ② 关于for循环中的解释:int[] arr = {1,2,3,4} for(i = 0;i<array.length;i++):从数组的第一个元素开始,到数组的最后一个元素,遍历元素范围:arr[0]到arr[...

2021-03-15 12:37:51 3642

原创 【图解】Java实现插入排序(注释详细)

1、概述 什么是插入排序?思想:把序列中的第一个元素看做有序,序列后每一个元素经过比较,然后插入已经排号的序列中,直到序列中的元素全部插入完成。动画演示:2、算法分析1、从第一个元素开始,该元素可以认为已经被排序。2、取出下一个元素,在已经排序的元素序列中从后向前扫描。3、如果该元素(已排序)大于新元素,则将该元素移到下一位置。4、重复步骤3,直到找到已排序的元素小于或者大于新元素的位置。5、将新元素插入到该位置。6、重复步骤2。注意点: ① 从第二个元素...

2021-03-15 10:11:25 582

原创 【详解】冒泡排序<java实现>

1、概述 冒泡排序的核心思想: 从头开始让相邻的两个元素进行比较,符合条件就交换位置,条件可以是从小到大排序,或者从大到小排序。这样就把最大值或者是最小值放到了序列的最后一个位置了;接着再从头开始两两比较,直到整个序列都是有序的。注意: ① 比较过程是序列中相邻元素进行比较,最大或者最小的元素放在后面。 ② 假如比较好的序列是从小到大排序,那么第一趟比较后的最大的元素在序列的最后一个,第二趟比较的时候就不需要再比较最后一个元素;所以第二次比较...

2021-03-14 10:36:58 111

原创 【代码注释详细】Java实现归并排序算法

1、概述 归并排序是一种稳定的算法,该算法采用分治法的典型的应用。将已有自序列合并,得到完全有序的序列。即先使每个子序列有序,再使子序列之间有序。然后将两个有序表合成一个有序表,称为二路归并。 归并操作,也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。 如 设有数列{6,202,100,301,38,8,1} 初始状态:6,202,100,301,38,8,1 第一次归并后:{6,202},{100,301},{8,38},{1} ...

2021-03-13 18:53:05 181

原创 【详解】@RequestParam注解的用法

@RequestParam用于将指定参数赋值给方法中的形参。意思就是标注浏览器地址栏参数名称。 @RequestParam有3个名称:1、 value:在浏览器地址栏请求参数的名称,如http://localhost:8080/login?name=zhangsan ,也就是@RequestParam(value = "name") 如果不写value的值,则默认形参的参数名为该变量名,http://localhost:8080/login?userName=zhangsa...

2021-03-12 19:34:33 7840

原创 【详解】@Param注解的用法

1、概述 首先明确这个注解是为SQL语句中参数赋值而服务的。 @Param的作用就是给参数命名,比如在mapper里面某方法A(int id),当添加注解后A(@Param("userId") int id),也就是说外部想要取出传入的id值,只需要取它的参数名userId就可以了。将参数值传如SQL语句中,通过#{userId}进行取值给SQL的参数赋值。2、实例: 实例一:@Param注解基本类型的参数 mapper中的方法:public Use...

2021-03-12 16:06:28 230983 33

原创 Java面试题三:进程和线程的区别和联系

当我们使用电脑打开QQ的时候,这时候电脑就开启一个进程。当我们查看QQ里面的发的信息或者扫一扫等各种操作的时候,其实就开启了线程。进程: 进程是系统正在运行的应用程序,程序一旦运行就是进程, 进程是资源分配和调度的最小单位。 程序是是一组指令的有序集合,本身没有什么含义,只是一个静态的实体。而进程不同,它是程序在某个数据集上的执行。进程是一个动态的实体,有自己的声明周期,进程因创建而产生,因调度而运行,因等待资源或者时间处于等待状态,因完成任务而撤销。反应了一个程...

2021-03-12 11:40:04 252

原创 【详解】SpringBoot项目启动成功,页面报错404

出错的原因可能有以下几种:1、SpringBoot启动类和Controller在不同级的路径下应该是:springboot的配置文件application.java默认扫描的位置是Application所在目录的同级目录和子目录改为:2、路径错误路径不正确...

2021-03-11 14:40:16 654

原创 【详解】springboot主配置文件配置,mybatis配置项mybatis.configuration.map-underscore-to-camel-case=true/false

在springboot配置的时候,一般添加上:mybatis配置项 mybatis.configuration.map-underscore-to-camel-case=true/false,原因如下 当我们在MySQL定义表的字段的时候,有的字段定义成比如user_name,user_password的形式,但是在我们Java语言创建实体类的时候遵循实体类的属性是驼峰原则,一般实体类属性写成userName,userPassword的形式。使用mybatis框架的时候,mybat...

2021-03-11 09:54:31 1447

原创 Java面试题一:final、finally、finalize三个关键字的区别和联系

1、final: final可以修饰类、变量、方法。 final修饰类的时候表示该类不能被继承,final修饰方法表示该方法不能被重写,final修饰变量的时候表示该变量是一个常量不能被重新赋值。2、finally: finally一般作用在异常try—catch—finally中,在处理异常的时候,通常将我们一定要执行的代码放到finally代码块中。表示不管是否出现异常代码块中的内容都会执行。3、finalize finalize是一个方法,属于Obj...

2021-03-09 22:56:55 650

原创 Java面试题二:重载和重写的区别

1、重载: 在Java中,方法的重载就是在类中创建多个同名的方法,方法中的参数类型和参数的个数不同,多个同名函数同时存在,重载是多态的一种表现。调用方法时,通过传递给他们不同的参数个数和参数类型来决定使用那一个方法,方法的返回值类型可以一样,也可以不一样。java重载是根据参数的类型和数量来进行判断的,跟方法的返回值没有关系。 特点:在同一个类中, 方法名相同、参数类型和参数个数不同。能够有不同的訪问修饰符;能够抛出不同的异常; 代码示例如下: pub...

2021-03-09 22:41:01 214

原创 【详解】Thymeleaf中的基本表达式:@{},#{},${},*{}

1、@{}:thymeleaf中的超链接表达式话说例子如下:<a th:href="@{/user/login}"></a><a th:src="@{/user/login}"/>2、#{}:thymeleaf中的消息表达式、或者是资源表达式一般和 th:text一起使用多一点,#{}取出来的值取代了标签中的值,#{key}对应的value。如果标签中间已经有值,#{}取出来的值会覆盖标签中的值话说例子如下:<div th:text=

2021-03-09 19:12:17 16753 2

原创 详解Thymeleaf中的[[...]]内联

thymeleaf中的[[.....]]内联简化了thymeleaf的取值问题,举例如下:<-- 从session中取值 --><div>[[${session.username}]]</div> 等价于:<div th:text="${session.username}"></div>说白了,就是文本取值。但是在JavaScript中的需要加th:inline="javascript"><scri...

2021-03-09 18:50:28 490

原创 Java之《剑指Offer》:输入一个链表,输出该链表中倒数第k个结点。

1、题目描述:输入一个链表,输出该链表中倒数第k个结点。2、解题思路: 这也是一类题目,求链表结点的到第k个结点的值。首先定义两个头指针。 第一个指针先走K步,第二个指针原地不懂 然后当第一个指针走了k步后,第二个指针随着第一个指针往后走,第一个个指针每走一步,第二个指针也走一步,直到 第一个指针走到末尾 第二个指针指向的元素就是目标结点。 建议举个例子,画画图,走一遍,一目了然。3、代码实现:imp...

2021-03-01 23:51:42 132 2

空空如也

空空如也

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

TA关注的人

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