自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 问答 (1)
  • 收藏
  • 关注

原创 接口和抽象类的区别

接口和抽象类区别及使用选择总结区别构造函数:抽象类可以有构造函数,接口不可以main方法:抽象类可以有main方法并可以运行,接口不可以访问修饰符:接口中的方法默认使用public abstract 修饰,抽象类中的方法可以使任意修饰符实现数量:类可以实现很多个接口,但只能继承一个抽象类成员变量:接口中的成员变量只能是public static final类型,抽象类中的成员变量可以使任意类型设计目的及使用接口的设计目的,是对类的行为进行约束,强制要求不同的类具有相同的行为,但并不对如

2021-06-16 16:41:00 142

原创 浅拷贝与深拷贝

Java中的对象拷贝是指将一个对象的所有属性拷贝到另一个有着相同类型的对象中去。Java中的对象拷贝主要分为深拷贝和浅拷贝。浅拷贝对于基本数据型,浅拷贝会将给属性值直接复制一份给对象,也就是两份不同的数据,所以对其中一个对象的变量值进行修改并不会影响另一个对象。对于引用数据类型,浅拷贝进行的对象的引用传递,也就是说讲对象的地址复制一份给新的对象,实际上两个对象指向的是同一个地址,这样在对其中一个对象的成员变量进行修改时会影响另一个对象。浅拷贝实现方式有两种,一个是通过拷贝构造方法实现,另一个是通

2021-06-06 13:25:40 103

原创 Object类方法

概览public native int hashCode()public boolean equals(Object obj)protected native Object clone() throws CloneNotSupportedExceptionpublic String toString()public final native Class<?> getClass()protected void finalize() throws Throwable {}p

2021-06-06 13:10:51 164

原创 String、StringBuilder与StringBuffer小结

StringString表示的是Java中的字符串,String被创建后不可更改,查看源码可知String由final修饰。所以对String进行类似字符串拼接、截取操作实际上都是产生了新的对象。StringBufferStringBuffer对象是一个可变字符串,当一个 StringBuffer 被创建以后,通过 StringBuffer 的一系列方法可以实现字符串的拼接、截取等操作。一旦通过 StringBuffer 生成了最终想要的字符串后,就可以调用其 toString 方法来生成一个新的字符

2021-06-01 20:53:10 81

原创 TopK算法问题解题技巧

TopK问题就是让你在给定序列中寻找最大或者最小的K个数,这类问题通常有三类结局方法。方法一:使用排序将序列排序后输出最大或最小的K位,此类方法简单但是一般不符合面试要求。 class Solution { public int[] getLeastNumbers(int[] arr, int k) { int[] vec = new int[k]; Arrays.sort(arr); for (int i = 0; i < k; ++i)

2021-05-31 23:25:29 91

原创 Java实现工厂方法模式

工厂方法模式是弥补简单工厂模式中产品单一,扩展难的缺点。比如一个生产汽车的简单工厂如果去生产自行车,就需要去更改生产线,而工厂方法模式就是在创建工厂的时候创建生产自行车的工厂,这样需要时直接用就可以了。工厂方法模式由四部分组成:抽象产品接口、具体产品类、抽象工厂接口、具体工厂类。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。//抽象产品inter

2021-05-18 21:06:15 419

原创 java实现简单工厂模式

以汽车举例,在没有工厂的时候,如果我想要得到一辆汽车,我需要知道制作汽车的各个步骤,而有了工厂之后,我只需要告诉工厂我需要的型号,具体的细节交给工厂实现,最后工厂返回给我需要的车,降低了耦合性,提升了效率。简单工厂模式的组成为一个抽象的接口,多个抽象接口的实现类,一个工厂类,用来实例化抽象的接口。// 产品接口interface Car { void run(); void stop();}// 具体实现类class Benz implements Car { pu

2021-05-18 20:27:00 187

原创 Java实现单例模式

单例模式是指某个类只能有一个实例,提供一个全局的访问点。单例模式的实现方式共有8种,包括线程安全与线程不安全两大类。第一种:饿汉式,通过静态变量实现,线程安全,在初始化变量时实例化class Singleton{ private Singleton() { } private static final Singleton instance = new Singleton(); public static Singleton getInstance() {

2021-05-18 20:05:16 265

原创 设计模式七大原则

单一职责原则单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则。这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a class to change)。降低类的复杂度,一个类只负责一项职责。提高类的可读性,可维护性降低变更引起的风险通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,

2021-05-18 19:24:46 319

原创 Springboot配置Nacos出现异常

springboot配置nacos启动时经常出现如下异常:failed to req API:/nacos/v1/ns/instance after all servers([127.0.0.1:8848]) tried: failed to req API:127.0.0.1:8848/nacos/v1/ns/instance. code:503 msg: server is DOWN now, please try again later!一般是配置文件出现了问题,将data文件夹下的prot

2021-05-16 21:37:27 510

原创 KMP算法

Java实现KMP算法KMP 算法就利用之前判断过信息, 通过一个 next 数组, 保存模式串中前后最长公共子序列的长度, 每次回溯时, 通过 next 数组找到, 前面匹配过的位置, 省去了大量的计算时间。KMP算法核心之一是部分匹配表,部分匹配” 的实质是, 有时候, 字符串头部和尾部会有重复。 比如, ” ABCDAB” 之中有两个” AB” , 那么它的” 部分匹配值” 就是 2(” AB” 的长度) 。 搜索词移动的时候, 第一个” AB” 向后移动 4 位(字符串长度-部分匹配值) ,

2021-05-14 19:58:46 45

原创 排序算法之桶排序

Java实现桶排序算法步骤:(1)建立10个桶,每个桶大小与待排数组大小相等,同时建立一个一维数组存储每个桶中的数据个数(2)计算出序列中的最大值,确定最大值的位数来确定要循环的次数(3)遍历一次数组,对数据取余后放入对应的桶中,同时计数+1(4)遍历完成后将桶中的数据依次取出放入原数组以备下一次遍历使用,同时清空计数(5)重复(3)(4)代码:public static int[] radixSort(){ int[] arr = new int[]{2,1,5,9,156

2021-05-14 15:27:02 89

原创 排序算法之快速排序

Java实现快速排序快速排序是比较常用的算法之一,也是作为程序员必须要掌握的一种算法,快排的时间复杂度为O(n logn),空间复杂度为O(logn),但它是一种不稳定的排序算法。快速排序的递归实现步骤如下:从数列中挑出一个元素,称为 “基准”(pivot);重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;递归地(recursive)把小于基准值元

2021-05-14 14:28:46 50

原创 排序算法之插入排序

Java实现插入排序插入排序是稳定的排序方法,平均时间复杂度为O(n^2)。插入排序的思想是将第一个元素认为已经有序,取出下一个元素从后往前扫描比较并插入序列中。具体步骤如下:(1)从第一个元素开始,该元素可以认为已经被排序;(2)取出下一个元素,在已经排序的元素序列中从后向前扫描;(3)如果该元素(已排序)大于新元素,将该元素移到下一位置;(4)重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;(5)将新元素插入到该位置后;(6)重复步骤2~5。代码如下:public stati

2021-05-14 14:01:16 37

原创 自定义数据协议,将多位日期保存在字节数组中

自定义数据报协议来保存多位的日期数据。如2021年5月11日21时58分20秒,使用无符号的String存储为20210511215820,将这个数据保存在6字节的数组中,依次为年月日时分秒。byte[] time = new byte[6]; Date date = new Date(); DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); String format = dat

2021-05-11 22:15:26 225

原创 java实现普里姆算法

算法步骤:设 G=(V,E)是连通网, T=(U,D)是最小生成树, V,U 是顶点集合, E,D 是边的集合若从顶点 u 开始构造最小生成树, 则从集合 V 中取出顶点 u 放入集合 U 中, 标记顶点 v 的 visited[u]=1若集合 U 中顶点 ui 与集合 V-U 中的顶点 vj 之间存在边, 则寻找这些边中权值最小的边, 但不能构成回路, 将顶点 vj 加入集合 U 中, 将边(ui,vj) 加入集合 D 中, 标记 visited[vj]=1重复步骤②, 直到 U 与 V 相等

2021-03-26 16:49:25 115

原创 Springboot整合MybatisPlus代码生成器

1.关键依赖: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <depend

2021-03-11 14:08:14 84

原创 JAVA中native关键字

1.native是java中的一个关键字,在Java诞生的时候正是c跟c++盛行的时候,想要立足就得能够调用c跟c++的程序,native就是用来实现这个功能的。2.凡是带了native关键字的,说明java的作用已经达不到了,会去调用底层库。3.native关键字作用与方法上,并且不提供实现体(废话,肯定是其他语言实现的了),它会进入本地方法栈,通过调用JNI接口实现对其他语言代码和代码库的使用。4.内存中有一块专门开辟的区域:Native Method Stack,登记Native方法。...

2021-03-10 23:04:47 5255

原创 排序算法之冒泡排序

冒泡排序顾名思义像冒泡一样每次排序产生一个最大或最小的数放到最后面,常见解决方法是使用双层for循环,第一层遍历数组第二层进行比较排序,详细步骤参考代码。public class Algorithm{ public static void main(String args[]){ int a[] = Bubblesort(); for(int i = 0;i < a.length;i ++){ System.out.println(a[i]); } } public

2021-03-10 21:47:50 35

空空如也

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

TA关注的人

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