自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 7.2 搜索二叉树(BST)及其Java实现

简单来说,它是一个加了限定条件的二叉树,它可以使最坏情况下的平均搜索的时间复杂度降低到O(log n).一个节点的左子树只能包含值小于该节点的值的节点一个节点的右子树只能包含值大于该节点的值的节点左右子树也都必须是二叉搜索树比如我们想向一颗空树中添加下面元素:3,2,1,4,5最后我们得到的树结构应该如下:fill:#333;color:#333;color:#333;fill:none;

2023-04-06 15:17:59 622 1

原创 6.1 队列的链表实现 Java版

队列和栈不同,它是一个先进先出表,它的特性是先进先出,先被存进的元素先被取出。我们可以使用数组去实现队列,但是对于数组实现而言,队列用链表来实现更为简单。

2023-03-31 09:53:54 345

原创 5.1 栈Stack基于动态数组的Java实现

栈是一个有序的线性表,只能在栈顶进行操作插入和删除操作。所以也叫先进后出表。

2023-03-30 10:34:06 401

原创 37.Java进阶之实现动态编译

我们可以编写自己的用于特殊目的的类加载器,这使得我们可以在向虚拟机传递字节码之前执行定制的检查。例如我们可以编写一个类加载器,它可以拒绝加载没有标记为 piadfor的类。如果要编写自己的类加载器,只需要继承ClassLoader类,然后覆盖这个类的findClass方法:ClassLoader的loadClass方法用于将类的加载操作委托给其父类加载器进行,只有当该类尚未加载并且父类加载器也无法加载该类时,才调用findClass方法。try {

2023-03-09 19:00:00 1688

原创 36.Object中equals和toStirng 源码分析

我们都知道Object是所有类的父类,那么它里面的一些方法你是否真的理解了呢?下面我们就以源码为基础来学习这些看似简单的方法吧!!

2022-11-22 09:40:55 341

原创 32.1 Java进阶之注解概念,工作原理

如果使用过Spring做开发,相信对注解并不陌生,相信大家都用过@Resource,@Autowired注解,通过将@Resource这个注解修饰一个类,Spring会自动这个类进行对象创建,通过@Autowired修饰一个变量,Spring会将这个变量赋值为相应的类的对象引用。这样我们就能将类的对象的管理交给Spring来进行管理,方便自己的开发工作。所以,我们可以把注解看作一种标记工具,通过这种工具,我们能开发出一些框架级别的东西来帮助我们提高编程效率。我们可以拿它和泛型进行类比。

2022-11-14 20:19:13 353

原创 31.3 Java进阶之lambda方法引用

但有咩有什么方法可以直接把println方法传递到Timer构造器呢?有时我们可能已经有现成的方法可以完成你想要传递到其他代码的某个动作。其中object是类的实例,instanceMethod为实例方法。有时候,我们希望能够在lambda表达式中访问外围方法或类中的变量。例如:假设我们只希望只要出现一个定时器事件就打印这个事件的对象。例如:Person::new 是Person构造器的引用。构造器引用与方法引用很类似,只不过方法名为new。第三种情况中,第一个参数会成为方法的目标。

2022-11-11 22:30:00 631

原创 27.7 Java集合Deque学习(双端队列)

有时,根据经验也会判断失误,事实上,Jdk里并没有一个名为AbstractDeque的抽象类哈哈哈。猜测归猜测,我们还是要实事求是的去验证。不过,我们好像有了意外发现,除了ArrayDeque外,LinkedList也实现了Deque接口哦。

2022-10-29 10:55:52 1000

原创 27.6 Java集合之Queue学习(Queue接口,PriorityQueue)

果然,JDK对于Queue接口提供了一些基础实现,这个类的实现的方法不多。

2022-10-28 09:55:56 780

原创 27.5 Java集合之Set学习(基本概念,存储原理,性能测试)

当进行add(E e)的时候,就会向map中put(e,Object常量),如果返回的是null,则表示添加成功,如果返回的不是null,则表示Map中已经存在键值对,添加失败。当进行add(E e)的时候,就会向map中put(e,Object常量),如果返回的是null,则表示添加成功,如果返回的不是null,则表示Map中已经存在键值对,添加失败。简单来说,TreeSet也是借助TreeMap来进行存储的,TreeMap是Map的有序实现,它会根据键的顺序将元素组织为一个搜索树。

2022-10-27 19:00:00 1038

原创 27.4 Java集合之Map学习

从上面我们可以看到,如果我们想得到包含键值对的集合对Map进行遍历,我们可以对Map.Entry来进行操作。下面我们就来学习一下Map中对于Entry的定义在Jdk中,和Collection体系一样,也提供了抽象类AbstractMap,其中包含了一些可复用的代码,方便在编写具体实现类时不做重复的工作。我们可以参考它的实现来学习如何去实现一个Map我们可以看一下其中的一些实现方法。

2022-10-21 19:43:08 767

原创 27.3 Java集合学习之List(基本概念,API,存储原理)

LinkedList 采用链表存储,如果是在头尾插入或者删除元素不受元素位置的影响(add(E e)、addFirst(E e) addLast(E e)、removeFirst()、 removeLast()),时间复杂度为 O(1),效率非常好。也就是说List接口是在Collection接口的基础上衍生出来的具体的链表数据结构的接口,在Java集合中,链表数据结构类都必须要实现List接口。它的关键操作方法都是同步的,这使得线程安全,但是性能不好。但是,在多线程的情况下它的性能下降的还是很厉害的。

2022-10-20 21:00:34 658

原创 25.java操作mysql一般步骤(JDBC)

点击红框框下载jar包,然后再如图所示,点击+号进行jar包添加。首先,java的mysql驱动jar包导入项目中。

2022-10-11 21:25:40 326

原创 1.Jdk8获取时间戳和时间差

JDK8中提供了全新的Instant类,我们可以使用这个类获取当前时间戳。

2022-10-08 21:46:50 1683

原创 20.2 Java写文件之OutputStream学习

在JavaAPI中,我们将可以向目的地写入一个字节序列的对象称为输出流。字节序列的来源地可以是文件,也可以是网络,还可以是内存块等等。输出流根据每次写出的字节数量的不同分为字节输出流和字符输出流。字节输出流每次都是写出一个字节的,而字符输出流每次写出都是根据基于两字节的字符为单位写出的。

2022-10-08 08:46:15 3524

原创 20.1 Java读文件之InputStream学习

在JavaAPI中,我们可以从字节序列来源地读入一个字节序列的对象称为输入流。字节序列的来源地可以是文件,也可以是网络,还可以是内存块等等。输入流根据每次读取的字节数量的不同分为字节输入流和字符输入流。字节输入流每次都是读取一个字节的,而字符输入流每次读入都是根据基于两字节的字符为单位读取的。方法定义返回值描述方法描述返回的是读入的字节asc码(-1~225)当读取完毕时,返回-1将源中的字节信息填充到b中当填充完毕时,返回实际填充数将b中指定位置填充源中的字节。

2022-10-08 08:38:43 6912

原创 18.1.动手实践:简历分析器

人工读取简历虽然准确,但是也耗费了大量的人力,如果我们能做一个简历分析器,在简历筛选前期自动过滤一些不符合条件的,将会节省大量人力阅读。所以,需要一个简历分析程序,能快速的对一份简历进行关键信息提取,比如,姓名,年龄,毕业院校,专业信息等。通过前面的学习,我们学习了基本的编程基础,现在通过自己动手做一个简历分析器来进行巩固和进阶。上面是满足了基本需要,想要做的更好的同学可以在此基础上进行扩展,优化,达到更好的效果。假设现在有一个文件,内容如下。

2022-09-21 21:20:56 249

原创 5.java不同方法的区别(构造方法,实例方法,类方法,static关键字)

对于每个对象操作的static变量都是同一个,但是普通的成员变量随着对象的建立,它也会被建立。static内部类:属于整个外部类,而不是属于外部类的每个对象,它不能访问外部类的非static成员但可以访问外部类的static成员。static属性属于类级别的,即由该类创建的所有实例对象共享同一个static属性。2)static变量是属于整个类的,也称之为类变量,而非静态变量是属于实例对象的,因此也称之为实例变量。static方法只能访问static变量,非static方法可以访问static变量。...

2022-08-31 19:57:27 1307

原创 4.类的定义,变量类型,方法类型

在Java中,一个类的类体包括如下内容:变量,方法下面我们写了一个名为Computer的类,然后在类ObjectStudy中用它生成了实例并使用实例对象达到我们的目的。/*** 此类展示对象操作。} }

2022-08-31 19:50:48 944

原创 0.泛型基础学习

泛型是对象类型的一种泛称,它可以指代所有类型的对象,因此,泛型程序代码可以处理多种不同类型的对象。这也是我们为什么需要泛型的原因:写出更通用的方法来提高工作效率。

2022-08-23 09:09:37 105

原创 23.共享模式

亨元模式是一种结构型设计模式,它丢弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让我们能在有限的内存容量中载入更多的对象。

2022-08-21 10:51:54 1398 1

原创 22.原型模式

直接复制还有另外一个问题,那就是我们必须知道对象所属的类才能创建复制对象,所以代码必须依赖该类。即使我们可以接收额外的依赖性,那还有一个问题:

2022-08-13 08:59:41 129

原创 21.建造者模式

建造者模式是一种创建型设计模式,它能让我们将创建一个复杂对象的步骤分开,一步一步的建造好我们要创建的对象架子,在最后使用时生成实例对象。该模式允许我们使用相同的创建代码生成不同类型的对象。...

2022-08-11 08:39:57 151

原创 20.单例模式进阶

比如,在一个系统中,总有一些东西是全局共享且很少改变的。比如数据库的url , password, username配置信息。我们可以把它放在一个单例类中,然后系统中所有的地方需要用到这些配置的时候,就可以直接通过全局访问点获得此单例类的实例,然后通过调用相关的方法获取相关的配置。...

2022-08-07 13:21:32 91

原创 14.Java实现UDP通信

在Java中,我们可以使用DatagramSocket来创建UDP服务器,使用DatagramPacket来装载接受的数据。DatagramSocket这个类是用来发送和接收数据包的套接字类。DatagramPacket这个类是用来存储数据的数据包。

2022-07-27 09:01:53 2526 2

原创 4.修改文件属性

执行操作系统的命令来实现文件属性的变更,这就要我们属性操作系统的命令操作了。

2022-07-23 09:58:37 1630

原创 3.文件选择器

在程序中,我们使用JFileChooser文件选择器弹出图形化文件选择器,然后选择我们想要的文件,就能得到该文件的File对象,后面我们就可以通过File对象对这个文件进行操作了。下面的例子展示了一个简单的Demo,选择一个图形文件,然后在控制台中打印出该文件的路径。在Java中我们可以通过图形化界面实现文件的选择,那就是文件选择器。...

2022-07-23 09:55:54 819

原创 19.工厂模式能解决啥问题

我们考虑这个问题的时候就说明我们其实已经了解了工厂模式,我们想要知道工厂模式的具体应用场景,并灵活的在工作中使用它来提供工作效率。

2022-07-19 21:19:30 1083 1

原创 18.装饰者模式能解决什么问题?

在讨论这个问题之前,我们先来复习下装饰者模式的定义:装饰者模式动态的将责任附加到对象上。 如果要扩展功能,装饰者提供了比继承更有弹性的替代方案。上面的定义中的关键是: 动态的将责任附加到对象上。 我们该如何理解这句话?我们可以这样理解:有一个对象A,它有一个方法sayHello,这个方法已经实现用英文打印 hello。下面需求来了,客户让你在不改变源代码的情况下让这个sayHello方法还要能打印中文 你好。在我们没有接触装饰者模式情况下,我们可能想到新增一个类继承这个对象A,然后重写sayHello

2022-07-10 17:17:32 341

原创 17.观察者模式能解决什么问题

在考虑这个问题之前,我们先来复习一下观察者模式定义:观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖都会收到通知并自动更新。看到这句话,我们要考虑一个问题:对象之间的依赖,谁依赖谁,怎么判断哪个是依赖者,哪个是被依赖者?那个是一,那个是多,如何依赖的?弄清楚了这个问题,就好理解了。带着上面的问题,我们来复习一下观察者模式的UML图(看不懂的请移步:观察者模式笔记)从上面的例子我们可以看到,有观察者Observer,被观察者(也叫主题)Subject,其中使用的过程中他们是相互组

2022-07-06 20:33:39 747

原创 12.反射与动态代理

使用代理可以在程序运行时创建一个实现指定接口的新类(代理类)。通常只有在编译时无法确定需要使用哪个接口时才需要使用代理,这对于应用程序员很少见。但是对于系统程序员而言,代理可以为工具类提供更加灵活的特性。下面我们学习一个简单的销售场景来理解动态代理的精髓。首先我们定义一个销售者接口:这个接口可以被很多销售者实现,比如时装销售者,房屋销售者等,它是一个公共的销售者接口。然后我们要定义一个房屋销售者实现它:好了,现在有了房屋销售者,我们可以编写程序对其进行使用了:这样做虽然可以实现功能,但是,如果我

2022-07-04 21:14:05 214

原创 16.策略模式能解决什么问题?

前面学习了很多种设计模式,通过实际的例子来进行学习,好像确实在那个例子里解决了问题,但是我们现实中的需求和例子中的往往不一样,那么我们该如何判断现实项目中策略模式能解决什么问题呢?这一节就策略模式的实用性迁移展开了一些讨论,纯属个人见解,仅供参考!策略模式定义了算法族,将具体的算法各自封装起来,让他们之间可以相互替换,并让算法的变化独立于使用算法的客户。首先,我们结合下面的UML图来解析一下:在上面的设计中,MallardDuck和RedheadDuck是客户,而FlyBehavior是一个飞行行为算法族

2022-07-01 17:49:43 614

原创 1.安全传输加密算法

安全传输就是,即使人家从网络监听到我们发送的数据包,也无法破译我们的信息,或者破译的机会十分渺茫。那么这是如何实现的呢? 毕竟,我们想要传输加密信息,接收者解密的话则需要密钥,而密钥也是需要通过网络传输的啊!!密钥的安全传输需要用到一种特殊的加密技术: 非对称加密。一次非对称加密信息传输包含三个要素: 公钥,私钥,传输报文典型的非对称加密算法RSA应用实例:运行结果:对称加密技术是一种很广泛的加密技术。对称加密的元素主要有两个: 密钥,报文对称加密的运行流程如下:首先通信双方约定好密钥,然后源服务器

2022-06-29 21:56:10 1593

原创 15.代理模式

代理模式为另一个对象提供提供一个替身或占位符(代理对象)以控制对这个对象的访问。简单来说,现在比如有一个对象A, 有一个对象B, 本来是对象B直接可以调用对象A实现某种功能的,但是由于特殊的原因对象B无法直接调用对象A来完成功能,而是通过对象C将对象A的调用封装后暴露接口给对象B调用才能完成我们想要的功能,这时我们就可以说对象C是对象A的代理对象。静态代理在编码时期将代理类写死的方式供其他对象使用。例如如下设计:Person接口ChinesePerson类现在我们想通过调用ChinesePerso

2022-06-26 14:59:45 209

原创 14.Java RMI学习以及制作远程服务

我们需要了解如何利用RMI进行远程方法调用。首先,RMI提供了客户辅助对象和服务辅助对象,为客户辅助对象创建和服务对象相同的方法。RMI的好处在于,我们不必自己写任何网络或I/O的代码。客户程序调用远程方法就和运行在客户自己的本地JVM上对对象进行正常方法调用一样。RMI提供了所有运行时的基础设施,好让这一切正常工作,包括查找服务(lookup service),这个服务用来寻找和访问远程对象。关于RMI调用和本地的方法调用,有一个不同点,虽然调用远程方法就如同调用本地方法一样,但是客户辅助对象会通过

2022-06-26 14:58:03 484

原创 13.状态模式

状态模式允许对象在内部改变时改变它的行为,对象看起来好像修改了它的类。

2022-06-24 10:08:55 118

原创 12.组合模式

组合模式允许我们将对象组合成树形结构来表现 "整体/部分" 层次结构。 组合能让客户以一致的方式处理个别对象以及对象组合。

2022-06-22 21:16:23 85

原创 11.迭代器模式

迭代器模式提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的实现。

2022-06-20 21:00:25 135

原创 10.模板方法模式

在方法中定义一个算法的骨架,将一些步骤的具体实现延迟到子类中。 模板方法模式使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤。

2022-06-18 09:04:45 269

原创 9.外观模式

外观模式提供一个统一的接口,用来访问子系统中的一群接口。

2022-06-17 09:45:30 77

空空如也

空空如也

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

TA关注的人

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