自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Map与Set及相关OJ练习和源码简单分析

本文介绍了Java中Map和Set接口的使用方法。Map是存储键值对的接口类,键唯一不重复,常用方法包括get、put、remove等,实现类有TreeMap(有序)和HashMap(无序高效)。Set继承自Collection接口,只存储键元素,具有去重特性。文章详细比较了TreeMap和HashMap的底层结构、性能特点及适用场景,并列举了Map.Entry内部类的主要操作方法。使用时需注意键值对操作限制、空值处理等细节,为Java集合框架的应用提供了实用参考。

2025-10-01 16:33:00 869

原创 二叉搜索树

本文介绍了二叉搜索树(二叉排序树)的概念、基本操作及其实现。二叉搜索树具有左子树小于根节点、右子树大于根节点的特性。文章详细讲解了查找、插入和删除操作的实现逻辑,特别是删除操作需要分三种情况处理。代码展示了Java实现插入、查找和删除的方法。文章分析了二叉搜索树的性能,最优情况为O(logN),最差情况为O(N/2)。最后介绍了搜索数据结构Map和Set的概念及Key-Value模型的应用场景,如词典查询、通讯录等。

2025-10-01 16:28:07 535

原创 PriorityQueue优先级队列(堆)

本文介绍了优先级队列的概念及其实现方式。优先级队列是一种特殊的队列结构,允许高优先级元素优先出队。Java中的PriorityQueue底层采用堆数据结构实现,堆是一种完全二叉树,具有大根堆和小根堆两种形式。文章详细讲解了堆的存储方式、创建过程(包括向下调整算法)、插入删除操作,以及时间复杂度分析(建堆为O(n))。最后给出了用堆模拟实现优先级队列的代码示例,并介绍了Java标准库中的PriorityQueue特性,强调其存储元素必须具备可比较性。通过习题帮助理解堆的相关概念和应用。

2025-09-30 20:09:35 763

原创 排序介绍及实现

排序算法是计算机科学中的基本操作,主要分为插入排序、选择排序和交换排序三大类。插入排序包括直接插入排序和希尔排序,前者适用于接近有序的数据,后者通过分组预排序提升效率。选择排序包含直接选择排序和堆排序,后者利用堆结构实现高效排序。交换排序以冒泡排序为代表,通过相邻元素比较实现排序。这些算法的时间复杂度从O(n²)到O(nlogn)不等,空间复杂度多为O(1)。稳定性方面,直接插入排序和冒泡排序是稳定的,而希尔排序和堆排序不稳定。实际应用中需根据数据特点选择合适的排序算法。

2025-09-30 19:57:42 850

原创 Java对象比较

本文介绍了Java中不同类型元素的比较方法。第一部分对比了基本类型和对象的比较,指出引用类型不能直接使用>或<比较,而==默认比较的是对象地址。第二部分详细讲解了三种对象比较方式:1)覆写Object类的equals方法进行内容比较;2)实现Comparable接口并重写compareTo方法,支持大小比较;3)使用Comparator比较器接口,通过实现compare方法定义比较规则。文章最后总结了三种方式的区别:equals只能比较相等性,Comparable建立内部顺序,Comparato

2025-09-29 13:49:45 647

原创 反射与枚举

反射与枚举要点总结 反射优点:提供动态获取类和对象信息的能力,增强灵活性,被主流框架广泛使用;缺点:性能较低,代码复杂度高。 获取Class对象:三种方式:Class.forName()、.class语法、getClass()方法,每个类在JVM中只有一个Class实例。 反射应用:可创建对象、访问私有构造方法/属性/方法,需setAccessible(true)突破访问限制。 枚举特性:JDK1.5引入,本质是Enum子类,构造方法默认私有。枚举类自动生成values()方法,但反射无法获取枚举构造方法,

2025-09-29 13:48:46 832

原创 Spring常量池讲解

本文通过Java代码示例演示了字符串常量池的特性。使用双引号创建的字符串会存入常量池,相同内容的字符串会共享引用;而通过new创建的字符串会生成新对象。同时展示了intern()方法的作用:调用intern()会将字符串对象的引用存入常量池,后续相同内容的字符串将直接引用该对象。当对s1调用intern()后,s2创建时就会复用s1的引用,使得s1==s2结果为true。这些示例清晰说明了Java字符串常量池和intern()方法的工作原理。

2025-09-27 21:17:08 267

原创 二叉树及OJ详解

本文介绍了树型结构和二叉树的基本概念与应用。树是一种非线性数据结构,具有层次关系和递归特性,包含根节点、子节点、叶子节点等基本概念。二叉树是每个节点最多有两个子节点的树结构,分为满二叉树和完全二叉树两种特殊类型。文章详细讲解了二叉树的性质和存储方式(顺序存储和链式存储),并介绍了二叉树的遍历方法(前序、中序、后序和层序遍历),给出了相应的伪代码实现。最后指出二叉树在文件系统管理等方面的实际应用。

2025-09-27 21:14:38 936

原创 queue队列详解及oj练习

本文介绍了队列(Queue)的基本概念、实现方式及其应用。队列是一种先进先出(FIFO)的线性表,支持在队尾插入元素、队头删除元素的操作。文章详细讲解了Java中Queue接口的使用方法,包括offer、poll、peek等常用操作,并提供了队列的链表模拟实现代码。此外,还介绍了循环队列的实现原理和双端队列(Deque)的概念,最后列举了两道相关的面试题。队列作为基础数据结构,在操作系统和算法设计中都有广泛应用。

2025-09-23 12:29:59 494

原创 栈详解及oj练习

本文介绍了栈的基本概念、使用方法、模拟实现及应用场景。栈是一种遵循后进先出(LIFO)原则的线性表,只能在栈顶进行插入(push)和删除(pop)操作。文章详细展示了栈的常用方法(push、pop、peek等),并通过Java代码示例演示了栈的基本操作。同时提供了一个基于数组的栈模拟实现方案,包括动态扩容功能。最后列举了栈的典型应用场景:序列转换、递归转循环、括号匹配、逆波兰表达式求值以及出入栈次序匹配等实际问题,并附有相关算法实现代码。这些内容全面覆盖了栈的核心知识点和实际应用。

2025-09-23 12:26:05 1082

原创 LinkedList与链表

本文介绍了链表结构及其在Java中的应用。首先分析了ArrayList在插入删除操作上的缺陷,引出链表结构的优势。重点讲解了无头单向非循环链表和无头双向链表的实现原理,并提供了单链表的基本操作代码示例。文章还详细解析了8种常见链表面试题的解法,包括删除节点、反转链表、查找中间节点等。最后对比了LinkedList的实现特点和使用场景,说明其适合频繁插入删除操作的场景。通过代码示例展示了LinkedList的构造方法和常用API,为理解链表数据结构及其应用提供了全面指导。

2025-09-22 21:45:15 1143

原创 ArrayList和顺序表

本文介绍了Java中ArrayList的实现原理和使用方法。主要内容包括:1)ArrayList作为动态顺序表的实现机制,包括扩容策略(默认1.5倍扩容)和底层数组结构;2)ArrayList的三种构造方法和常用操作(增删改查、遍历等);3)实际应用案例:字符串字符过滤、杨辉三角生成和扑克牌洗牌算法实现。文章着重分析了ArrayList的扩容机制源码,并对比了不同遍历方式的效率,指出for循环+下标和foreach是最常用的遍历方式。通过具体代码示例展示了ArrayList在实际开发中的典型应用场景。

2025-09-22 21:43:00 749

原创 Ajax简单介绍及Axios请求方式的别名

介绍:Axios对原生的Ajax进行了封装,简化书写,快速开发。步骤:引入Axios的js文件使用Axios发送请求,并获取响应结果。

2025-07-20 14:55:11 406

原创 Vue中组件的生命周期

生命周期、生命周期函数、生命周期钩子。

2025-07-20 14:52:20 192

原创 路由的概述

RouterLink :to="{name:'xinwen'}" active-class="active">新闻</RouterLink>//命名路由。<RouterLink :to="{path:'/about'}" active-class="active">关于</RouterLink><RouterLink to="/home" active-class="active">首页</RouterLink>//第一种写法:将路由收到的所有params参数作为props传给路由组件。

2025-07-18 21:23:09 703

原创 SpringBoot项目创建,三层架构,分成结构,IOC,DI相关,@Resource与@Autowired的区别

Spring官网:Spring | Home如果Spring官方脚手架创建失败可以使用阿里云URL地址创建。点击Sever URL后面的齿轮,输入https://start.aliyun.com要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:注意:申明bean时,可以通过注解的value属性指定bean的名字,如果没有指定,默认为类名首字母小写。基于@Autowired进行依赖注入的常见方式有如下三种:1.优点:代码简洁、方便快速开发缺点:隐藏了类之间的依赖关系、可能破坏类的封装性2.优点

2025-07-18 20:57:46 421

原创 Vue3中watch详解

Vue的watch用法总结 本文介绍了Vue中watch的几种使用场景: 监视ref定义的基本类型数据:直接写数据名,监视value值的改变 监视ref定义的对象类型数据:监视对象地址值变化,需手动开启深度监视才能监视内部属性 监视reactive定义的对象类型数据:默认开启深度监视且无法关闭 监视对象中某个属性:基本类型需写成函数形式,对象类型可直接写或写成函数式 监视多个数据:使用数组形式 使用watchEffect:自动追踪依赖,初始会执行一次,适合基于多个值的逻辑判断

2025-07-17 11:31:56 4165

原创 Vue3中ref与reactive的对比

2025-07-17 11:27:46 304

原创 Vue的介绍及常见指令

Vue是一款用于的的JavaScript。

2025-07-15 17:44:17 875

原创 JavaScript介绍

JavaScript基础与DOM操作摘要 JavaScript核心内容包括:1)两种引入方式(内部脚本和外部脚本);2)基本语法(变量、常量、数据类型检测);3)函数定义(常规函数、匿名函数和箭头函数);4)对象操作(自定义对象和JSON);5)DOM编程(文档对象模型,通过querySelector等方法获取元素)。此外,事件监听采用addEventListener可避免覆盖。JS作为弱类型语言,函数参数灵活,支持模板字符串简化拼接,箭头函数需注意this指向。DOM将网页元素视为对象,通过操作对象属性和

2025-07-15 17:31:24 366

原创 图书管理系统设计

本文描述了一个基于Java的图书管理系统,主要包含用户注册、登录、身份验证和图书管理功能。系统分为管理员和普通用户两类角色:管理员可进行图书增删改查等操作,普通用户则可借阅和归还图书。通过IOperation接口实现不同功能的模块化,并使用自定义异常处理错误情况。核心类包括Main(主程序)、Book(图书信息)、BookList(书架管理)、User(用户基类)及各功能操作类。系统采用面向对象设计,通过菜单驱动交互,实现了基本的图书管理功能。

2025-05-28 01:03:56 600

原创 数组的定义和使用

数组:可以看成是相同类型的集合,在内存中是一段连续的空间。在Java中数组中存放元素其类型相同数组的空间是连在一起的每个空间都有自己的编号,起始位置的编号为0,即数组的下标。

2025-05-28 01:01:22 1134

原创 运算符中的注意事项

本文介绍了Java中的字符串拼接和各类运算符的使用。字符串可通过"+"拼接,String类型不以\0结尾;运算符包括算术、关系、逻辑、位运算等,其中逻辑运算符支持短路求值。位运算包括按位与、或、取反、异或及移位运算,移位运算可替代部分乘除操作以提高效率。条件运算符是唯一的三目运算符,用于简化条件判断。文中还强调了运算时的类型转换规则和常见错误用法,如连续关系判断需分开写、条件表达式结果需被使用等。

2025-05-28 00:58:55 607

原创 初识Java

Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和 跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。

2025-04-17 20:04:10 1777

原创 数据类型与变量

介绍了Java中四类八种数据类型和其中一些值得注意的点

2025-04-17 20:01:24 551

原创 顺序表及基础功能的实现

顺序表是用一段的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组 上完成数据的增删查改。顺序表一般可以分为:静态顺序表:使用定长数组存储元素。//顺序表的静态存储#define N7//定长数组//有效数据个数}SeqList;动态顺序表:使用动态开辟的数组存储。//顺序表的动态存储// 顺序表的动态存储// 指向动态开辟的数组// 有效数据个数// 容量空间的大小}SeqList;静态顺序表只适用于确定知道需要存多少数据的场景。

2025-03-19 13:13:12 592

原创 时间·空间复杂度

算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源。因此,即时间复杂度和空间复杂度。在计算 机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。

2025-03-17 23:48:36 1694

原创 printf介绍

代码演示()int main()return 0;使用如上代码就可以在屏幕上打印出Hello World的字样。printf() 不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换⾏。为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符 \nreturn 0;如果在文本的中间有换⾏,也是通过插⼊换⾏符来实现,如下⽅代码(包括打印结果):

2024-08-23 23:45:40 2064 2

原创 c语言数据类型介绍(内置类型)

在 C99 中也引⼊了 布尔类型 ,是专⻔表⽰真假的。布尔类型的使⽤得包含头⽂件 <stdbool.h> 布尔类型变量的取值是: true (真)或者 false(假)而c语言则提供了丰富的数据类型来描述生活中的各种数据。C语言的数据类型可分为两大类:内置类型和自定义类型。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作。unsigned char //注:unsigned⽆符号的(下同)[signed] char //注:signed有符号的。

2024-08-17 01:59:09 590 2

空空如也

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

TA关注的人

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