<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Sarvartha的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Sarvartha</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Sarvartha]]></copyright><item><title><![CDATA[数组、特殊矩阵、稀疏矩阵]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/170197054</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/170197054</guid><author>Sarvartha</author><pubDate>Fri, 06 Nov 2026 17:13:49 +0800</pubDate><description><![CDATA[如果矩阵中非零元素数量远小于总元素数量，称为稀疏矩阵。一般约定：非零元素占比 < 5% 就可以认为是稀疏矩阵。❌ 问题：直接开二维数组存储，大量 0 白白浪费空间。三元组顺序表，只保存非 0 元素。表格存储方式适用对象优点缺点二维数组稠密矩阵随机访问 O (1)0 元素浪费大量空间特殊矩阵压缩（公式映射）对称 / 三角 / 对角矩阵空间小、可以公式寻址只适合有规律矩阵三元组顺序表静态稀疏矩阵节省空间，实现简单随机访问失效，增删慢十字链表动态稀疏矩阵（频繁修改）]]></description><category></category></item><item><title><![CDATA[Map 接口 & HashMap & LinkedHashMap & TreeMap]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/170054712</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/170054712</guid><author>Sarvartha</author><pubDate>Thu, 05 Nov 2026 00:03:40 +0800</pubDate><description><![CDATA[称之为键值对（Entry）key 唯一，不能重复；value 可以重复一个 key 只能对应一个 value；如果 put 相同 key，后面的值会覆盖前面的值key 和 value 都可以是 null，但是HashMap 最多只能有一个 key 为 null，value 可以多个 nullMap 集合没有继承 Collection 接口，是独立的双列集合，遍历方式和 Collection 单列集合不一样//学生类，作为key，必须重写hashCode、equals。]]></description><category></category></item><item><title><![CDATA[KMP算法]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/170054646</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/170054646</guid><author>Sarvartha</author><pubDate>Wed, 04 Nov 2026 23:52:29 +0800</pubDate><description><![CDATA[next[0]=-1（严版）和next[0]=0，写代码、看题目一定要对齐！❌ KMP 匹配的时候，手动让 i 回退，这是 BF 的逻辑，KMP 禁止 i 回退❌ 求 next 数组循环条件写错，j<m-1不是j<m❌ 混淆 “最长相等前后缀”，前后缀不能包含整个字符串j == m，不是 i。]]></description><category></category></item><item><title><![CDATA[朴素模式匹配（BF 算法，Brute Force 暴力匹配）]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/170054596</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/170054596</guid><author>Sarvartha</author><pubDate>Wed, 04 Nov 2026 23:49:04 +0800</pubDate><description><![CDATA[补充说明：很多教材下标从 1 开始写 BF，代码里 i、j 初始化为 1，逻辑会有一点点区别，考试要看题目定义！适合短字符串匹配、文本量很小的场景；长文本、大数据搜索（搜索引擎）一般不用 BF，改用 KMP、BM、Sunday 等算法。对比：后面 KMP 就是为了消除主串的回退，把复杂度降到 O(m+n)，BF 是 KMP 的前置基础。✅ 优点：逻辑最简单、好理解、好写代码 ❌ 缺点：存在大量重复回溯，最坏时间复杂度很高。，初学者优先掌握 0 下标版本，和 C 语言字符串一致。]]></description><category></category></item><item><title><![CDATA[Set接口、HashSet、LinkedHashSet]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169849912</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169849912</guid><author>Sarvartha</author><pubDate>Tue, 03 Nov 2026 09:17:53 +0800</pubDate><description><![CDATA[成员变量private 私有，保护数据安全提供无参、有参构造方法根据业务需要编写 get、set 方法，不需要就不写，不是必须全部生成重写toString()：打印对象时输出属性内容，否则打印类名@内存地址如果需要 HashSet 按业务属性去重：必须重写hashCode()和equals()//实体类，对应现实业务实体，未来可以映射数据库表//无参构造//有参构造//get、set//重写toString：输出对象时展示属性，而不是内存地址@Override。]]></description><category></category></item><item><title><![CDATA[TreeSet]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169849971</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169849971</guid><author>Sarvartha</author><pubDate>Tue, 03 Nov 2026 09:17:41 +0800</pubDate><description><![CDATA[TreeSet 属于 Set 接口实现类，；和 HashSet、LinkedHashSet 去重机制完全不一样，，依靠比较规则判定重复。两种排序方案：自然排序（Comparable）、比较器排序（Comparator）]]></description><category></category></item><item><title><![CDATA[集合概述 & Collection 接口]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169463632</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169463632</guid><author>Sarvartha</author><pubDate>Tue, 03 Nov 2026 09:17:24 +0800</pubDate><description><![CDATA[集合是 Java 提供的容器，用来存储、管理多个对象，长度可变。数组也是容器，集合就是为了弥补数组的短板。虚线 = 接口，实线 = 实现类；Collection、List、Set、Map 都是接口，不能直接 new有序、带索引、元素可重复；无序、无索引、元素不可重复：Collection 层面是按元素对象删除，不是索引；只有 List 才有按索引删除的重载方法clear()只是清空里面元素，集合对象本身还存在，不是变成 null集合存储的是对象地址，不是对象本身；]]></description><category></category></item><item><title><![CDATA[Iterator 迭代器、ListIterator & foreach 循环]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169463754</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169463754</guid><author>Sarvartha</author><pubDate>Mon, 02 Nov 2026 22:11:43 +0800</pubDate><description><![CDATA[foreach 是简化版 for 循环，底层依然是 Iterator 迭代器（语法糖）适用范围：数组、所有实现Iterablefor(容器中元素类型 临时变量 : 容器变量) {执行语句hasNext()只判断，不移动指针；不能连续多次调用next()，容易泛型缺失时，Iterator 取出元素是 Object，需要强制转换只能 List 获取，Set 集合不能使用增强 for 只是语法糖，编译后依然变成 Iterator，同样不能在遍历时直接调用集合增删方法。]]></description><category></category></item><item><title><![CDATA[LinkedList知识]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169463721</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169463721</guid><author>Sarvartha</author><pubDate>Mon, 02 Nov 2026 22:11:27 +0800</pubDate><description><![CDATA[LinkedList是List 接口的实现类，同时实现了Deque有序、可重复、带索引双向链表prev前驱指针 + item数据 + next后继指针✅ 核心特点首尾增删速度快：只修改指针，不需要移动元素查询慢：没有数组随机访问，按索引查找需要遍历链表线程不安全，支持存储 null兼具 List、队列、栈的功能，所以有两套首尾 API（一组抛异常，一组返回 null）ArrayList：可变数组 → 查询快，中间增删慢LinkedList：双向链表 → 首尾增删快，查询慢多态写时，]]></description><category></category></item><item><title><![CDATA[List 接口 & ArrayList]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169463679</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169463679</guid><author>Sarvartha</author><pubDate>Mon, 02 Nov 2026 22:11:09 +0800</pubDate><description><![CDATA[List 是Collection 的子接口（单列集合）有序：存入顺序和取出顺序一致可重复：允许存储重复元素有索引：支持根据索引操作元素（这是 List 独有的！Set 没有索引）所以 Collection 里所有方法，List 全都可以用，同时 List 新增一套带索引的专属方法ArrayList 是实现类，实现了 List 接口有序、可重复、有索引底层数组，查询快、中间增删慢扩容 1.5 倍；空参构造不会立刻创建长度 10 数组，JDK8 是懒加载线程不安全，不同步。]]></description><category></category></item><item><title><![CDATA[正则表达式]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169463561</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169463561</guid><author>Sarvartha</author><pubDate>Fri, 30 Oct 2026 16:26:36 +0800</pubDate><description><![CDATA[符号等价说明\d[0-9]任意数字\D[^0-9]任意非数字\s[\t\n\r ]空白字符：空格、制表符、换行\S[^\s]非空白字符\w单词字符（字母、数字、下划线）\W[^\w]非单词字符\A字符串起始，不受多行模式影响\G上一次匹配结束位置⚠️Java 重点：字符串中反斜杠需要转义！正则里 1 个，代码写\\例：正则\d→ Java 代码写成\\dmatches是全串匹配，不是包含匹配；只要有多余字符直接 false在正则代表任意字符；想匹配小数点，必须写\\.]]></description><category></category></item><item><title><![CDATA[SimpleDateFormat 、DateTimeFormatter]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169463483</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169463483</guid><author>Sarvartha</author><pubDate>Fri, 30 Oct 2026 16:26:18 +0800</pubDate><description><![CDATA[承接上一节 Date、LocalDate 系列，两个格式化器放在一起对比记忆。]]></description><category></category></item><item><title><![CDATA[Date、LocalDate、LocalTime、LocalDateTime、DateTimeFormatter类]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169463448</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169463448</guid><author>Sarvartha</author><pubDate>Fri, 30 Oct 2026 16:25:55 +0800</pubDate><description><![CDATA[JDK1.0 诞生，大部分方法过时，开发只记住两个常用构造底层本质：保存一个毫秒值，代表距离1970 年 1 月 1 日 00:00:00 UTC的毫秒数类包是否可变线程安全使用场景Datejava.util✅可变❌不安全老项目维护，不推荐新项目java.time❌不可变✅安全新项目首选❌不可变✅安全日期格式化解析（替代 SimpleDateFormat）]]></description><category></category></item><item><title><![CDATA[System 类、Math 类、Random 类]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169463394</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169463394</guid><author>Sarvartha</author><pubDate>Thu, 29 Oct 2026 19:29:12 +0800</pubDate><description><![CDATA[System 管系统，毫秒数组和退出；Math 做数学，上下取整幂和 π；Random 造随机，种子固定序列定；random 半开区间，取不到上限值。：从 1970-01-01 00:00:00 UTC 到现在的毫秒数。伪随机：由种子通过算法算出数字；种子相同，随机序列完全一样。注意：下标不能越界，否则抛数组下标越界异常。，用来生成伪随机数，可控种子。JVM 回收，不一定立刻执行。]]></description><category></category></item><item><title><![CDATA[StringBuffer、StringBuilder]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169463358</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169463358</guid><author>Sarvartha</author><pubDate>Thu, 29 Oct 2026 19:26:48 +0800</pubDate><description><![CDATA[String：不可变，每次修改生成新对象；适合内容不经常变动、少量拼接；==比较坑，比较内容用equals：可变、线程安全、速度慢；多线程共享字符串时使用：可变、线程不安全、速度最快；日常开发首选。]]></description><category></category></item><item><title><![CDATA[包装类知识]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169463317</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169463317</guid><author>Sarvartha</author><pubDate>Thu, 29 Oct 2026 19:23:16 +0800</pubDate><description><![CDATA[Java 是面向对象语言，但基本数据类型（intdouble等）不是对象。为了让基本类型也能像对象一样使用，Java 为每个基本类型提供了对应的 “包装类”。基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean，其他基本类型都是首字母大写。]]></description><category></category></item><item><title><![CDATA[队列基础知识]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169168106</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169168106</guid><author>Sarvartha</author><pubDate>Mon, 26 Oct 2026 19:39:07 +0800</pubDate><description><![CDATA[队列是只允许在一端插入、另一端删除的线性表队尾 rear：插入元素（入队 enqueue）队头 front：删除元素（出队 dequeue）空队列：队列里面没有元素。]]></description><category></category></item><item><title><![CDATA[栈的四则运算、栈的递归应用]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169168054</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169168054</guid><author>Sarvartha</author><pubDate>Mon, 26 Oct 2026 19:36:10 +0800</pubDate><description><![CDATA[递归到终止条件时逐层返回，不断出栈。栈的 LIFO 完美匹配递归 “先调用、后返回”。，把递归改成非递归。，从左往右扫描，遇到数字入栈，遇到运算符弹出两个数计算。每一次递归调用，都会把当前函数的局部变量、参数、返回地址压入。⚠️ 缺点：朴素递归大量重复计算，同时递归深度大，容易栈溢出。，先 pop 得到 2，再 pop 得到 6 →。，再用一个栈计算后缀表达式。很多场景不允许递归（防止栈溢出），我们可以。栈里保存每一层现场，后进先出返回。⚠️ 重点易错：先弹出的是。四则运算另一条路线：先把。]]></description><category></category></item><item><title><![CDATA[栈基础知识]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/169167988</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/169167988</guid><author>Sarvartha</author><pubDate>Mon, 26 Oct 2026 19:31:20 +0800</pubDate><description><![CDATA[栈是只允许在一端进行插入和删除操作的线性表。栈顶（top）：允许插入、删除的一端；栈底（bottom）：固定不动，不做增删；入栈（push）：向栈顶添加元素；出栈（pop）：从栈顶取出元素；空栈：栈中没有任何元素。#define MaxSize 10 // 栈最大容量，固定长度// 顺序栈结构体int top;// 栈顶指针，初始为0，代表空栈} SqStack;data[]：数组，存放栈元素；top = 0：空栈；：栈满；入栈：先放元素，top++；]]></description><category></category></item><item><title><![CDATA[String 类基础知识]]></title><link>https://blog.youkuaiyun.com/Sarvartha/article/details/168560825</link><guid>https://blog.youkuaiyun.com/Sarvartha/article/details/168560825</guid><author>Sarvartha</author><pubDate>Tue, 20 Oct 2026 21:51:47 +0800</pubDate><description><![CDATA[String 不可变，所有方法都不会修改原字符串，必须接收返回值// ❌错误！没有接收返回值，s仍然是abc// ✅正确，接收新字符串isEmpty()只判断长度 0，直接空指针，先判断！=null 再调用substring 是左闭右开，end 位置取不到split 的参数是正则，分割点是小数点、星号等一定要转义==对比地址，比较字符串内容一律用equals()]]></description><category></category></item></channel></rss>