![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
ThE wAlkIng D
这个作者很懒,什么都没留下…
展开
-
动态代理看这个就够了
InvocationHandler h //它就类似于Agent的功能,代理的功能和目标对象的业务功能调用在这。类中的成员变量设计为接口,方法的形参设计为接口,方法的返回值设计为接口,调用时接口指向实现类.4)能够灵活的进行目标对象的切换,却无法进行功能的灵活处理(使用动态代理解决此问题)又称为子类.通过动态的在内存中构建子类对象,重写父类的方法进行代理功能的增强.代理对象在程序运行的过程中动态在内存构建.可以灵活的进行业务功能的切换.2)动态代理,又为JDK动态代理,CGLib动态代理(子类代理)...原创 2022-08-17 16:39:53 · 161 阅读 · 1 评论 -
剑指 Offer 58 - I. 翻转单词顺序
s.trim()方法去除空格键,让i,j从尾部开始遍历当i遍历到空格的时候,使用substring进行截取,把单词截取出来放到res新建StringBuilder后面,最终使用tostring转换成字符串。输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"Iamastudent.“,则输出"student.aamI”。本题使用双指针的方法进行遍历。...原创 2022-07-24 21:12:17 · 143 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
第二种情况当一个链表为空的时候另外一个不是空的时候复制另外的链表存放进新链表。输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。分情况讨论首先第一种两个链表都不是空的时候比较大小,按照次序存放。新建链表进行拼接两个子链表。...原创 2022-07-23 17:22:20 · 180 阅读 · 0 评论 -
剑指 Offer 22. 链表中倒数第k个节点
接着再让慢指针和快指针一起向后走,在并列一个while循环,走快慢指针。使用快慢指针双指针来做,倒数第K的意思就是快慢指针相隔k个单位进行遍历。首先先让快指针走K个单位,while循环遍历快指针。......原创 2022-07-23 11:48:07 · 161 阅读 · 0 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串
首先定义两个指针,两个指针均从为0的位置开始遍历,第一个指针后移,哈希表中的字母加1,直到哈希表中某个字母的值为2,则第二个指针后移知道字母数值为二地方的值变为一,统计两个指针之间的间距。主要的难点是i先走,j在i的空间内遍历,设置中间变量l作为存储中间值。dp[j]表示右边界下标为j的时候,可以取到的最长不重复范围长度。...原创 2022-07-22 11:50:33 · 66 阅读 · 0 评论 -
(动态规划系列)剑指 Offer 48. 最长不含重复字符的子字符串
三部曲确定dp[i]含义。原创 2022-07-17 18:43:31 · 39 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
本体使用队列来做,首先判断子树是否为空接着放入左和右,判断出队列的元素是否为空,肯定考虑四个条件。然后再把左子树的左边 右子树的右边依次放入队列(成对的放入)原创 2022-07-12 22:41:15 · 94 阅读 · 0 评论 -
剑指 Offer 27. 二叉树的镜像
本体使用队列来做,队列的目的就是存储原始序列顺序的二叉树首先判断根节点是否为空然后新建子队列队列压入根节点使用while(循环)弹出队列元素分别压入左右节点交换左右节点返回初始结点...原创 2022-07-12 16:43:33 · 107 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
本题使用递归的方法来寻找:先从根节点判断B是不是A的子结构,如果不是在分别从左右两个子树判断,只要有一个为true,就说明B是A的子结构如果B为空,A不为空则遍历结束如果B不为空,A为空,或者这两个结点的值不一样则返回返回false。接着比较A,B节点的对应的左右子树。...原创 2022-07-12 15:57:20 · 123 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II
本道题使用广度优先遍历的层序遍历,使用迭代法进行遍历(根据层序遍历的特点使用队列进行存储)本题与上面一题的不同在于输出的是二维链表,即使用上一个方法遍历的结果,引入一层while循环进行遍历存储每一层的值...原创 2022-07-06 09:52:31 · 113 阅读 · 0 评论 -
排序算法-快速排序
1.确定基准元素就是数组最左边的位置元素2.首先判断队尾元素2.1 如果队尾元素大于等于基准元素的时候,向前挪动尾指针2.2 如果队尾元素小于基准元素的时候,则把尾指针的数值赋值给初始指针3.要是为2.1的情况则继续比较,要是为2.2的情况则首指针后移一位4.当两个首指针,尾指针相遇的时候则把基准元素赋值给两个元素相交的位置5.引入递归(这里要注意递归的前后顺序)...原创 2022-07-05 10:26:10 · 207 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
二维数组查找原创 2022-07-04 17:04:41 · 64 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
)使用等差数列公式求出n项和,然后求出数组的和,两者进行相减原创 2022-07-04 16:34:50 · 49 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I
)两种方法第一种:暴力解决。第二种:使用双分查找,由于是排序好的数组,对于找到的那个值,让他加加判断是否相等,如果相等就让count+1;原创 2022-07-04 15:13:29 · 42 阅读 · 0 评论 -
剑指 Offer 58 - II. 左旋转字符串
主要考察substring的用法。原创 2022-07-04 11:16:35 · 56 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
1.使用数组来做,首先将新建一个数组,计算原始字符串的长度当做数组长度2.遍历数组。找到空格字符串,提换为“%20”;3.新数组建立原来数组长度的三倍,用来存放新字符串4.字符串数组转为字符串5.考察.charAt的用法,以及字符数组转为字符串的用法(String a =new String())...原创 2022-07-04 11:14:16 · 57 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
1.使用数组来做,首先将新建一个数组,计算原始字符串的长度当做数组长度2.遍历数组。找到空格字符串,提换为“%20”;3.新数组建立原来数组长度的三倍,用来存放新字符串4.字符串数组转为字符串5.考察.charAt的用法,以及字符数组转为字符串的用法(String a =new String())...原创 2022-07-04 10:52:58 · 71 阅读 · 0 评论 -
剑指 Offer 35.复杂链表的复制
1.先判断是否为空,如果为空则返回null2.新建map集合来进行原始链表到新链表的复制3.建立新链表的指针指向原创 2022-07-04 10:09:48 · 82 阅读 · 0 评论 -
剑指 Offer 06.从头到尾打印链表
1.由于输入输出都是数组,所以新建一个数组,用来存放反转以后的数组即从尾部到头的数组2.其次取出数组的长度赋值给新数组3.头结点取值赋值给新数组,然后往后遍历,原创 2022-07-04 09:38:34 · 100 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
1.首先定义两个栈s1,s2,s1的栈顶作为队尾,s2的栈顶作为队投2.删除操作首先判断s2是否为空 如果不为空,把栈顶元素弹出就是头元素 如果为空,将s1所有元素弹出入栈到s23.s2为空返回-1,不为空返回栈顶元素...原创 2022-07-01 15:21:05 · 52 阅读 · 0 评论 -
JAVA基础-XML
1.XML概述它是一种数据表示结构格式,常用于数据传输以及存储数据。1.1 使用场景XML内容经常被当做消息进行网络传输,或者作为配置文件用于存储系统的信息。1.2 XML数据的作用是什么,最终需要怎么处理存储数据做配置信息,进行数据传输,最终需要被程序进行读取,解析里面的信息。1.3 XML解析使用程序读取XML中的数据两种解析方式:SAX解析 DOM解析2. 设计模式...原创 2022-04-26 11:13:44 · 328 阅读 · 0 评论 -
JAVA基础-接口(附抽象类)
1.抽象类抽象类1.接口中存放了哪些东西1.可以有main函数(入口函数)public static void main(String[] args){}2.default方法public default void print1(){}3.private修饰的方法private static void print2(){}4.静态方法public static void print3(){}5.抽象方法public abstract void print4();一般来说前两个修饰符原创 2022-04-22 10:03:22 · 887 阅读 · 0 评论 -
JAVA基础-junit单元测试
1.1 单元测试方法使用原因1.2 单元测试方法用处单元测试方法常用注解原创 2022-04-12 10:29:44 · 322 阅读 · 0 评论 -
JAV基础-枚举类
1.1 枚举类的理解Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。enum Color { RED, GREEN, BLUE; } 实例:enum Color{ RED, GREEN, BLUE;} public class Test{ // 执行输出结果 public static v原创 2022-04-11 21:08:47 · 4479 阅读 · 0 评论 -
JAVA基础-Java内存图以及堆、栈、常量区、静态区、方法区的区别
堆:堆主要存放Java在运行过程中new出来的对象,凡是通过new生成的对象都存放在堆中,对于堆中的对象生命周期的管理由Java虚拟机的垃圾回收机制GC进行回收和统一管理。类的非静态成员变量也放在堆区,其中基本数据类型是直接保存值,而复杂类型是保存指向对象的引用,非静态成员变量在类的实例化时开辟空间并且初始化。所以你要知道类的几个时机,加载-连接-初始化-实例化栈:栈主要存放在运行期间用到的一些局部变量(基本数据类型的变量)或者是指向其他对象的一些引用,因为方法执行时,被分配的内存就在栈中,所以当然存储.原创 2022-04-11 11:06:46 · 1146 阅读 · 0 评论 -
LeeCode每日一题-反转字符串
1. 题目2. 代码class Solution { public static void reverseString(char[] s) { int l=0; int r=s.length-1; while(l<r){ swap(s,l,r); l++; r--; } } public static void swap(char[]原创 2022-04-05 11:18:16 · 218 阅读 · 0 评论 -
JAVA基础-值传递机制
从内存释放角度角度理解,执行结束swap方法以后会自动释放内存,所以会输出main方法中的结果。/* * 方法的形参的传递机制:值传递 * * 1.形参:方法定义时,声明的小括号内的参数 * 实参:方法调用时,实际传递给形参的数据 * * 2.值传递机制: * 如果参数是基本数据类型,此时实参赋值给形参的是实参真是存储的数据值。 */public class ValueTransferTest1 { public static void main(String[] args原创 2022-04-05 10:29:39 · 453 阅读 · 0 评论 -
JAVA基础-抽象类(抽象类与抽象方法)
1. 抽象类概念在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。在 Java 中抽象类表示原创 2022-04-01 15:13:46 · 515 阅读 · 0 评论 -
JAVA基础-关键字final
/* * final:最终的 * * 1.final可以用来修饰的结构:类、方法、变量 * * 2.final用来修饰一个类:此类不能被其他类所继承。 * 比如:String类、System类、StringBuffer类 * 3.final修饰一个方法:final标记的方法不能被子类重写。 * 比如:Object类中的getClass()。 * 4.final用来修饰变量:此时的"变量"(成员变量或局部变量)就是一个常量。名称大写,且只能被赋值一次。 * 4.1原创 2022-03-31 17:20:02 · 45 阅读 · 0 评论 -
JAVA基础-类的成员之四(代码块)
/* * 类的成员之四:代码块(或初始化块) * * 1.代码块的作用:用来初始化类、对象的 * 2.代码块如果有修饰的话,只能使用 static * 3.分类:静态代码块 vs 非静态代码块 * * 4.静态代码块 * 》内部可以有输出语句 * 》随着类的加载而执行,而且只执行一次 * 》作用:初始化类的信息 * 》如果一个类中,定义了多个静态代码块,则按照声明的先后顺序执行 * 》静态代码块的执行,优先于非静态代码块的执行 * 》静态代码块内只能调用静态的属性、原创 2022-03-31 16:54:01 · 49 阅读 · 0 评论 -
JAVA基础-Static关键字,单例设计模式
1.static 关键字的使用定义属性:static是静态的,可以用来修饰 属性 方法 代码块 内部类1.1 使用static修饰属性:静态变量(或类变量)1.1.1 属性:是否使用 static 修饰,又分为:静态属性 VS 非静态属性(实例变量)实例变量:我们创建了类的多个对象,每个对象都独立的拥有了一套类中的非静态属性。当修改其中一个非静态属性时,不会导致其他对象中同样的属性值的修饰。(归对象所有)静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量。当通过静态变量去修改某一个变量原创 2022-03-30 21:28:27 · 128 阅读 · 0 评论 -
JAVA基础-包装类
1.单元测试方法import java.util.Date;import org.junit.Test;/* * java中的JUnit单元测试 * * 步骤: * 1.选中当前项目工程 --》 右键:build path --》 add libraries --》 JUnit 4 --》 下一步 * 2.创建一个Java类进行单元测试。 * 此时的Java类要求:①此类是公共的 ②此类提供一个公共的无参构造器 * 3.此类中声明单元测试方法。 * 此时的单元测试方法:方法原创 2022-03-30 20:23:44 · 307 阅读 · 0 评论 -
JAVA基础-Object类(简单说明),String类,.equals()方法
Object类1.object类是所有Java类的根父类;2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类3.Object类中的功能(属性、方法)就具有通用性。属性:无方法:equals() / toString() / getClass() / hashCode() / clone() /finalize()wait() 、notify()、notifyAll()4.Object类只声明了一个空参的构造器。1.1 主要结构1原创 2022-03-30 17:10:43 · 236 阅读 · 0 评论 -
JAVA基础-多态性
父类的引用指向子类的对象?(多态性)直白理解父类的引用指向子类的对象 //1、父类引用指向子类对象 //它是一个List对象,有些ArrayList有但是List没有的属性和方法,它就不能再用 //只能用List对象和ArrayList共有的方法 List<Integer> list = new ArrayList<Integer>(); // 2、子类引用指向子类对象 // 他是一个ArrayList对象,是List的子类,继承了Lis原创 2022-03-29 19:54:38 · 508 阅读 · 0 评论 -
Java基础-HashSet中关于HashCode()和equals()的重写HashSet中元素的添加过程
HashSet1.关于HashCode()和equals()的重写//原文链接:https://blog.csdn.net/javazejian/article/details/513483202.HashSet中元素的添加过程//来源尚硅谷教学1.关于HashCode()和equals()的重写equals()的所属以及内部原理(即Object中equals方法的实现原理)equals方法是类Object中的一个基本方法,用于检测一个对象是否和另外一个对象相等。然而在Object类中这个方法是判转载 2022-03-15 16:05:21 · 666 阅读 · 0 评论