![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 70
zjh0101
一日不书,百事荒芜
展开
-
MyBatis的工作原理
基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是。共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。文件可以加载多个映射文件,每个文件对应数据库中的一张表。将操作数据库的结果按照映射的配置进行转换,可以转换成。和参数拿到数据库进行执行,得到操作数据库的结果。该参数是对映射信息的封装,用于存储要映射的。执行和执行结果映射处理等。的运行环境等信息,例如数据库连接信息。语句、结果映射配置),存储在内存中。映射文件,该文件中配置了操作数据库的。原创 2023-02-14 09:45:58 · 286 阅读 · 0 评论 -
使用Spring框架的好处是什么
通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(这些模块主要被分如下图所示的核心容器 、 数据访问。支持面向切面的编程,并且把应用业务逻辑和系统服务分开。(面向切面编程) 、 工具 、 消息和测试模块。包含并管理应用中对象的生命周期和配置。抛出的)转化为一致的unchecked。把具体技术相关的异常(比如由。框架是个精心设计的框架,是。框架的一个很好的替代品。是轻量的,基本的版本大约。原创 2023-02-13 21:24:30 · 474 阅读 · 0 评论 -
Spring工厂模式
以上代码就是通过抽象工厂来实现层与层之间的解耦,这种情况下如果想要更新别外一个实现类,只需要修改配置文件就可以了,注意这里只是降低了层与层之间的复杂度,并没有让耦合消失,实际上层与层是不可能没有耦合的。可以使用抽象工厂模式,让StudentDao、StudentService的实现在在工厂中生成,而工厂可以根据配置 文件的指定类型来创建不同的对象,而且工厂本身一般是不变的。最终目标还是需要使用某个实现,但是为了解除耦合引入工厂类,传递工厂类一个名称,由工厂类封装 了具体的创建对象流程。原创 2023-02-11 10:32:13 · 587 阅读 · 0 评论 -
Spring框架
以上代码是有问题的,即在控制层中依赖了具体的业务逻辑层,在业务逻辑层中依赖了具体的数据访问层,这样就和具体的实现类耦合在了一起,也没有发挥面向接口编程的作用。如果要更换(如要换成 StudentOracleImpl),就需要修改源代码,但是项目很多模块都需要同时修改,这样会非常麻烦;的依赖隐藏在了代码中,也不适合全局把握整个项目,因此维护性和二次开发比较麻烦。上的替代语言,并且可以根据应用程序的需要,进行灵活地创建多种架构体系。文件,覆盖原来的文件,不利于项目的后期维护,而且项目与项目之间。原创 2023-02-11 10:21:14 · 459 阅读 · 0 评论 -
简介JWT
前端可以将返回的结果保存在浏览器中,退出登录时删除保存的JWT Token。认证机制的应用程序不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利,jwt。进行身份认证的话,需要保存一份信息在服务器端,而且这种方式会依赖到Cookie。由于使用了不可逆的加密算法,无法解码出原文,它的作用是校验。、后端核对用户名和密码成功后,将包含用户信息的数据作为。可以被保存在客户端的任意位置的内存中,不一定是。,再用加密算法加密一下,加密的时候要放进去。每部分的作用,在服务端接收到客户端发送过来的。原创 2023-02-03 09:29:07 · 165 阅读 · 0 评论 -
Redis缓存穿透、缓存击穿和缓存雪崩,以及解决办法
这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。,然后再去访问数据库,还是没有,那么就在缓存里放一个占位符,下次来的时候,检查这个占位符,如果发生时占位符,就不去数据库查询了,防止。,防止缓存宕机使用断路器,如果缓存宕机,为了防止系统全部宕机,限制部分流量进入。,同时数据库也没有,如果黑客大量的使用这种方式,那么就会导致。解决方案:可以使用一个默认值来防止,例如,当访问一个不存在的。压力倍增,可能导致宕机,但实际上,查询的都是相同的数据。原创 2023-02-01 21:11:24 · 3564 阅读 · 0 评论 -
MyBatis工作原理及循环依赖
对于构造器的循环依赖,Spring 是无法解决的,只能抛出 BeanCurrentlyInCreationException 异常表示循环依赖,所以下面我们分析的都是基于 field 属性的循环依赖。比如“A对象依赖B对象,而B对象也依赖A对象”,或者“A对象依赖B对象,B对象依赖C对象,C对象依赖A对象”;A对象需要注入B对象,发现对象池(缓存)里还没有B对象(对象在创建并且注入属性和初始化完成之后,会放入对象缓存里)。类型的参数, 该参数是对映射信息的封装,用于存储要映射的。原创 2023-01-31 21:34:45 · 1483 阅读 · 0 评论 -
SpingMVC工作原理及流程图解读及springmvc常用到的注解
3、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器 (如果有),再一起返回给DispatcherServlet。5、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。2、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。4、DispatcherServlet调用HandlerAdapter(处理器适配器)。11、DispatcherServlet响应用户。原创 2023-01-31 21:19:14 · 77 阅读 · 0 评论 -
SpingBoot知识点
Primary:它是一个修改优先权的注解,比如上面的例子,当我们有猫有狗时,假设这次使用猫,name只需要在猫类的定义上加入@Primary就可以了这里的@Primary的含义告诉SpringIOC容器,当发现有多个同类型的Bean时,请优先使用我。除非你不希望使用SpringBoot的默认配置,它也提供了自定义配置的入口。AOP的功能简单来说就是将程序中的重复代码抽取出来,在需要执行的时候通过动态代理的方式,在不修改代码的基础上,实现对功能增强,提高程序的可用性,同时也能大大提高开发效率。原创 2023-01-29 21:45:14 · 323 阅读 · 0 评论 -
使用Spring框架的好处是什么?
通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的。提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(支持面向切面的编程,并且把应用业务逻辑和系统服务分开。包含并管理应用中对象的生命周期和配置。把具体技术相关的异常(比如由。框架是个精心设计的框架,是。框架的一个很好的替代品。是轻量的,基本的版本大约。原创 2022-12-29 21:45:28 · 207 阅读 · 0 评论 -
Spring由哪些模块组成?
这些模块主要被分如下图所示的核心容器 、 数据访问。(面向切面编程) 、 工具 、 消息和测试模块。原创 2022-12-28 21:24:53 · 166 阅读 · 0 评论 -
MyBatis
关键字,并会删掉额外的逗号(这些逗号是在使用条件语句给列赋值时引入的)元素可以用于动态包含需要更新的列,忽略其它不更新的列。子句 where标签另外提供功能,就是子句的开头为。、定义映射元文件,用于指定对应关系和对应的。元素只会在子元素返回任何内容的情况下才插入。是一款优秀的持久层框架,它支持自定义。代码以及设置参数和获取结果集的工作。、根据表结构定义对应的实体类。对象)为数据库中的记录。用于实现单元测试的支持。元素也会将它们去除。标签体不为空,则自动在。标签体内容的前部添加前缀。开头,则自动剔除开头的。原创 2022-12-02 21:02:47 · 381 阅读 · 0 评论 -
MVC模式
它使用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。是模型视图控制器的缩写,是一种软件设计典范,是一种架构型的模式,本身不引入新功能,只是帮助将开发的结构组织的更加合理。开发:非常简单高效,特别适合微型应用开发,但是代码基本上不具备重用性,开发效率低,难于维护。一般使用Servlet。内容,这样就容易导致代码维护困难,可读性差,不能支持所见即所得的开发。:职责清晰,适合大型项目,但是分层过多,不适合小型项目的开发。原创 2022-11-30 08:58:03 · 127 阅读 · 0 评论 -
servlet常见问题
Servlet是一个用于扩展服务器端功能的服务器端组件技术 运行在服务器端,所以调用执行是由服务器负责 在web.xml中需要进行配置,就是将servlet和一个请求地址建立对应关系,当浏览器对地址 发起请求时,服务器则按照规则调用serlvet类中的方法 服务器端的组件技术 直接或者间接的实现Servlet接口 用于扩展服务器端功能,可以实现动态网页的开发。一般情况下,在会话中,服务器存储的session是通过sessionid存储在cookie中,来存储在客户端的。原创 2022-11-28 21:05:31 · 546 阅读 · 0 评论 -
监听器
属性的内容,当 servletRequest对象被销毁的时候调用销毁时的方法打印出当前浏览量,这样就简单的实现了。对象的方法调用 或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。在需要监听事件源的方法中,方法体的某一处先构造创建一个Event。注解用于声明过滤器,该注解将会在部署时被容器处理,容器根据具体的属性配置将相应的。监听器就是监听某个对象的的状态变化的组件,是基于观察者模式设计的。文件中的和的子标签该注解通常不单独使用,而是配合。的监听器,可以监听客户端的请求,服务端的操作等。原创 2022-11-28 20:55:43 · 1646 阅读 · 0 评论 -
过滤器
因此,如果开发人员对一个过 滤器类声明了两次,则容器将实例化两个相同的过滤器类的实例。主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的。容器提供了声明在过滤器 的部署描述符的过滤器config。那样对请求作出响应,而是修改或调整到资源的请求,修改或调整来自资源的响应。需要注意的是,这个方法的请求和响应参数的类型是。处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。过滤器它只关心请求的地址是否匹配, 不关心请求的资源是否存在。这种模式给予请求的类。原创 2022-11-23 21:10:41 · 229 阅读 · 0 评论 -
cookie
是一个客户端会话技术,是由服务器端创建,放在响应头发送到客户端保存,用于存储少量数据,因为存放在客户端中,容易被人编造伪造,不是很安全。的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候。库、文件中 Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现。是保存在客户端的数据,所以如果不做设定,默认情况下是跟着客户端一起消失,如果设置。是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据。属性,其他属性是不可读的。原创 2022-11-18 21:14:49 · 646 阅读 · 0 评论 -
List接口
删除指定位置上的元素,并返回被删除的元素,原始位置上的元素前。按照索引序号获取指定位置上的元素,需要不能越界。向指定位置上添加元素,原始数据后移。LinkedList的区别是什么。list接口的常用实现类。的下标位置,如果查不到则返。在多线程情况下,不建议使用。list接口的常用方法。是由数组实现数据存储的。修改指定位置上的元素,从前向后查找第一次出现。原创 2022-11-17 21:41:32 · 256 阅读 · 0 评论 -
Java反射机制
返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当类被加载成.class文件时,此时Person类变成了.class,在获取该字节码文件对象,也就是获取自己, 该类处于字节码阶段。运用.class 语法。原创 2022-11-16 20:17:16 · 98 阅读 · 0 评论 -
跨数据库平台分页显示和可修改的结果集
真正在数据显示时,不能一次性加载所有数据,建议采用的是按需加载。可修改的结果集 由于执行性能的问题,一般不建议使用。原创 2022-09-29 21:33:12 · 139 阅读 · 0 评论 -
大对象Lob字段的处理
中的记录时不用逐个逐个的读取,而可以根据具体需要跳过几条记录再进行读取,或者从后向前读取。不同的数 据库处理方式略有区别,大字段一般都是采用流的方式进行处理。结果集的时候只能够只读访问,也就是只能读取里面的内容,不能做更改。将学生照片存储在文件系统中,实际数据中只存储照片的路径。往数据库的表格中添加一条记录,其中有一个字段是自增的。之后,就可以使用结果集的方法使行指针任意滚动的方法。,所以只要驱动支持,加载驱动的操作可以省略。需求:存储学生信息,要求存储学生的照片。由于大字段类型存储的数据较多,一般针对。原创 2022-09-28 21:12:50 · 81 阅读 · 0 评论 -
JAVA线程常用知识
默认情况下,只有当线程池中的线程数大于corePoolSize时,keepAliveTime才会起作用,如果一个线程空闲的时间达到keepAliveTime,则会终止,直到线程池中的线程数不超过corePoolSize。当线程A获得偏向锁后,线程B进入竞争状态,需要获得线程A持有的锁,那么线程A撤销偏向锁,进入无锁状态。共享变量被volatile修饰,在线程A更改变量的值后,会立即刷入主内存,并且会清除掉线程B的内存空间中的变量缓存,线程B直接读取内存中的变量,保证线程之间的可见性;线程池中的核心线程数。原创 2022-09-27 21:09:15 · 480 阅读 · 0 评论 -
SQL概述
表中任意两行交换位置不影响表达的数据,表中任意两列交换位置不影响表达的信息。在查询语句中使用星号代表获取表中的所有列,如果只获取其中一部分列,例如只查询用户的名称。关系就是一个带有表头的二维表格,表中的每行数据就是一个元组,元组的集合就是关系,每个列。主键:能够唯一标识一行数据的列组合。固定的常数列,但如果想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数。,在阿里的开发规范中强制规则,不允许使用星号,要求指明需要查询的列名称。直到今天这门结构化的查询语言并没有太大的变化,相比于其他语言,原创 2022-09-26 20:20:27 · 117 阅读 · 0 评论 -
mysql数据库
那么,怎样才能把用户各种经营相关的、纷繁复杂的数据,有序、高效地存储起。数据所采用的数据类型是根据业务需求和对应的数据类型特征进行选择,不建议使用过于复杂的数。为了保证存储的数据都是完整有效的,避免存放垃圾数据,所以提供针对插入的数据进行检查。实际是做了这样的优化操作:先把数据表里的所有数据和索引删除,然后重建数据表。的意思为未知的数据,它既不是空字符串,不是任何一个具体的值;快速创建一个表和另外一个表的结构相同,只是克隆表结构,不会克隆数据。,注意可能存储的数据会超出范围,其中的符号位和小数点不占位宽,原创 2022-09-23 21:37:05 · 75 阅读 · 0 评论 -
数据库概论
关系型数据库是建立在关系数据模型基础上的数据库,借助集合代数的概念和方法处理数据库中的数 据,同时也是一个被组织成具有描述的二维表格,表格的实质就是装载数据项的收集器,这些表格中的 数据能以不同的方式被存取或者重新召集,而不需要更新组织数据库的表格。数据的操纵对象是关系,返回结果也是关系 关系模型的存取路径对用户透明,优点在于数据独立性、高安全性,简化编程。组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并在一定的范围 内可以被多个用户共享。数据库中的数据以及数据之间的关系按照一 定的。原创 2022-09-22 12:11:10 · 76 阅读 · 0 评论 -
Java反射机制2
返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当类被加载成.class文件时,此时Person类变成了.class,在获取该字节码文件对象,也就是获取自己, 该类处于字节码阶段。运用.class 语法。原创 2022-09-19 21:01:20 · 219 阅读 · 0 评论 -
Java的反射机制
比如很多框架Spring都是配置化的(比如通过XML文件配置Bean),为了保证框架的通用性,可能需要根据配置文件加载不同的类或者对象,调用不同的方法,这个时候就必须使用到反射了,运行时动态加载需要的加载的对象。(1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。优点:在运行时获得类的各种内容,进行反编译,对于Java这种先编译再运行的语言,能够很方便的创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代码的链接,更加容易实现面向对象。原创 2022-09-15 21:47:53 · 149 阅读 · 0 评论 -
UDP网络通信收发包原理即代码
3、使用DatagramSocket类的receive()方法接收UDP获取的数据实际上就存储在创建空包的数组种,转换显示时建议设置长度。代表一个代理服务器,可以在打开URLConnection连接时指定代理,也可以在创建Socket连接时指定代理。它使用的策略是最高效的,因为消息在每条网络链路上只需传递一次,且。不过,许多流行的协议——例如XMPP,用限制接收者数量的方法弥补了这一不足。3、使用DatagramSocket类的send()方法数据包。)创建一个数据包套接字,绑定到指定的端口。原创 2022-09-15 21:41:14 · 761 阅读 · 0 评论 -
Java上传照片代码
【代码】 Java上传照片代码。原创 2022-09-14 21:33:00 · 393 阅读 · 0 评论 -
计算机网络编程常见问题
而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。B 接收到连接请求报文段后,如果同意连接,则向 A 发送确认,在确认报文段中(SYN=1,ACK=1,确认号 ack=x+1,初始序号 seq=y),测试 TCP 服务器进程进入 SYN-RCVD(同步收到)状态。原创 2022-09-14 21:25:33 · 150 阅读 · 0 评论 -
Java网络编程
计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来的,实现资源共享和数据传输的系统。对象代表统一资源定位器,是指向互联网资源的指针,资源可以是简单的文件或目录,也可以是对复杂对象的引用,例如对数据库或搜索引擎的查询。网络程序则不保证数据的可靠性,但是协议简单、传输速度快(比如用在音视频数据传输,它们不需要很高的可靠性,偶尔丢帧是可以忍受的)类用于表示服务器套接字,其主要功能是监听客户端的请求,然后将客户端的请求连接存入队列中,默认请求队列大小是50。原创 2022-09-13 22:38:27 · 93 阅读 · 0 评论 -
ArrayList 和 Vector,LinkedList
1、Set里面不允许有重复的元素即不能有两个相等(注意,不是仅仅是相同)的对象,即假设Set集合中有了一个A对象,现在我要向Set集合再存入一个B对象,但B对象与A对象equals相等,则B对象存储不进去,所以,Set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true,当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。8. Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?原创 2022-09-13 22:09:14 · 411 阅读 · 0 评论 -
线程相关的模型
2)启动一个虚拟线程,然后执行的时候,交给os上的一个用户线程去执行,这样做的好处就是,jvm可以自己实现调度,而且可以控制虚拟线程的大小,这就是n:m或者1:m,看具体的实现,而如果将线程虚拟化之后,调度就可以由jvm来实现了,做成1:m还是n:m完全看jvm调度的实现,这就是协程,go其实是这种做法,早期的solaris上的hotspot也是这种做法,后来改了,改成选择1的做法,这样在不同os上hotspot的实现就统一了。总之,原子类型用自旋+CAS的无锁操作保证了共享变量的线程安全性和原子性。原创 2022-09-08 21:24:22 · 281 阅读 · 0 评论 -
java死锁问题
虽然在Thread API中由指定线程优先级的机制,但是只能作为操作系统进行线程调度的一个参考,换句话说就是操作系统在进行线程调度是平台无关的,会尽可能提供公平的、活跃性良好的调度,那么即使在程序中指定了线程的优先级,也有可能在操作系统进行调度的时候映射到了同一个优先级。活锁指的是线程不断重复执行相同的操作,但每次操作的结果都是失败的。3)请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。原创 2022-09-07 21:40:22 · 96 阅读 · 0 评论 -
Java集合的快速失败机制 fail-fast
Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是集合里元素不允许重复的原因)。- Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。- List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。例如:假设存在两个线程(线程1、线程2),线程1通过Iterator在遍历集合A中的。原创 2022-09-07 21:32:10 · 634 阅读 · 0 评论 -
Java二叉树
TreeMap是一个有序的key-value集合,它是通过红黑树实现的。- V get(Object key)方法用于获取指定key的value,key为与value相关联的键。深度为K的二叉树中,K-1层结点数是满的2^(k-2),K层结点是左连续的(即结点编号是连续的);- 4、从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)- 3、如果节点是红色的,则它的子节点必须是黑色的(反之不一定),(也就是从每个叶子到根的。如果key对应的值已经存在,原创 2022-09-06 20:15:27 · 80 阅读 · 0 评论 -
LinkedHashMap
LinkedHashMap存取数据,还是跟HashMap一样使用的Entry[]的方式,双向链表只是为了保证顺序。accessOrder涉及到LinkedHashMap存储的顺序,具体的存储顺序分为两种:插入顺序(false)和。HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。这也是默认值,表示LinkedHashMap中存储的顺序是按照调用put方法插入的顺序进行排序的。如果不进行访问操作,则为插入顺序一致。存储的数据是有序的【添加顺序】原创 2022-09-02 21:24:55 · 952 阅读 · 0 评论 -
HashMap总结
juc包中的ConcurrentHashMap,前者是锁整个表,后者采用乐观锁的方式。:Java8-中的HashMap是基于“数组+链表”的方式(链表法解决冲突),到了Java8,应该是“数组+链表/红黑树”的方式,默认阈值为树化8退化6。:HashMap是不安全,JDK1.8-并发由于插入采用的是头插法可能会导致。:HashMap可以在常数时间内增加,删除,查找元素,但这也是一种平均。:HashMap的桶数组一次扩展为原数组的2倍,控制扩展和移动的次数,树化处理可以避免哈希碰撞攻击。原创 2022-09-02 14:28:53 · 209 阅读 · 0 评论 -
java Map接口
先执行hash(key)根据key获取一个hash值, 参数2是要存储的key值,参数3是要存储的value,参数4表示如果当前位置已存在一个值。* Java7中使用Entry来代表每个HashMap中的数据节点,Java8中使用Node,基本没有区别,都是key,value,hash和。//如果原始存储的数据和value参数不相等或者不存在对应的key并且key对应存储的原始数据为null,则不执行任何操作。//哈希表的本质是一个数组,数组中每一个元素称为一个桶,桶中存放的是键值对。原创 2022-09-01 21:43:27 · 467 阅读 · 0 评论 -
java特殊数据结构:栈Stack
两个特殊的数据结构* 栈Stack:FILO* 定义栈* 对栈的基本操作只有push进栈和pop出栈两种,栈的实现可以有数组实现的顺序栈和链表结构的链式栈** java提供的具体实现类Stack* E push(E item) 将数据存储到数组中,如果集合已经满了,则添加新数据时增容* E pop() 弹出栈顶数据。...原创 2022-08-31 21:58:03 · 284 阅读 · 0 评论