- 博客(49)
- 收藏
- 关注
原创 Java集合框架详解:单列集合与双列集合
Java集合框架主要分为两大类:单列集合(Collection)和双列集合(Map)。单列集合:每个位置存储单个元素,由Collection接口定义List:有序、可重复的元素序列Set:不允许重复元素的集合:队列,通常用于按特定顺序处理元素双列集合:每个位置存储键值对,由Map接口定义每个元素包含键和值,键不能重复,值可以重复Java集合框架├── Collection(单列集合)│ ├── List(有序、可重复)│ │ ├── ArrayList(数组实现)
2025-05-20 20:53:03
494
原创 Java中的IO流详细笔记
IO流(Input/Output Stream)是Java中用于处理输入和输出数据传输的抽象概念。它将数据的传输过程形象地比喻为"流水",数据如同水流一样从一个位置流向另一个位置。IO流体系| |字节流 字符流| || | | |
2025-05-16 00:22:39
1181
原创 JAVA中异常处理详解
异常(Exception)是程序执行期间发生的事件,它会中断程序的正常指令流。简单来说,异常是一个表示程序出现错误或异常状态的对象。在Java中,异常是一种特殊类型的对象,它从类继承而来。当方法遇到无法处理的情况时,会创建一个异常对象并将其"抛出",然后Java运行时系统会寻找能够"捕获"并处理这个异常的代码。当标准异常类不足以表达特定的错误情况时,可以创建自定义异常类。// 自定义已检查异常super("余额不足,还需 " + amount + " 元");// 使用自定义异常A6。
2025-05-13 10:39:48
1072
原创 Java中的JDK7和JDK8时间类详解
JDK7的时间API(Date、Calendar、SimpleDateFormat)存在设计缺陷,使用不便且线程不安全。不可变对象,保证线程安全API设计更合理,月份从1开始功能更丰富,支持更多日期时间操作支持链式调用,代码更简洁在新项目中应优先使用JDK8的时间API,旧项目可以考虑逐步迁移。LocalDateLocalTimeInstantDuration(秒、纳秒)或Period(年、月、日)ChronoUnit参考资料。
2025-05-11 22:23:29
954
原创 Java Stream流详解:从入门到精通
Stream流是Java 8引入的处理集合数据的API,它让我们以声明式(描述要做什么,而不是怎么做)的方式处理数据。核心特点声明式编程:更关注做什么,而不是怎么做支持链式操作:可以像搭积木一样组合多个操作支持并行处理:轻松切换到并行模式,提高性能延迟执行:在最后一步(终端操作)才会真正执行创建流:从数据源获取流中间操作:对流进行一系列转换和处理(延迟执行)终端操作:触发流的计算,返回结果中间操作:返回新Stream的操作,可以链式调用,不会立即执行。
2025-05-11 02:37:16
900
原创 Java中Comparator排序原理详解
a-b和b-a减法运算的数学特性:数值大小与结果正负的关系Comparator接口的设计约定:返回值正负与排序顺序的关系理解了这一原理,我们就能根据需要轻松实现升序或降序排列。
2025-05-10 18:29:32
903
原创 Java中Lambda表达式详解
Lambda表达式是Java 8引入的一个重要特性,它提供了一种简洁的方式来表示函数式接口的实例。Lambda表达式本质上是一种匿名函数,它没有名称,但有参数列表、函数体、返回类型,以及可能抛出的异常列表。Lambda表达式的主要特点代码简洁,提高可读性支持将行为作为参数传递使集合操作更加高效和易于使用促进并行处理是函数式编程的基础代码简洁性:减少冗余代码函数式编程支持:将行为作为参数传递集合处理增强:结合Stream API高效处理集合并行处理支持:轻松实现并行计算。
2025-05-10 00:16:22
618
原创 Java中的内部类详解
内部类(Inner Class)是定义在另一个类内部的类。Java中的内部类就像是外部类的一个成员,它可以访问外部类的所有成员变量和方法,即使它们被声明为private。内部类的主要特点可以访问外部类的所有成员(包括私有成员)能够实现"多重继承"的效果提高了封装性可以更好地组织代码结构提高封装性:内部类可以隐藏实现细节访问外部类的私有成员:增强了类之间的联系实现回调机制:特别是匿名内部类避免多继承问题:通过内部类可以模拟多继承效果选择使用哪种内部类的建议成员内部类静态内部类局部内部类。
2025-05-09 23:56:53
1452
原创 Java中字符转数字的原理解析 - 为什么char x - ‘0‘能得到对应数字
能够将字符形式的数字转换为实际数值的原理,是基于ASCII/Unicode编码中数字字符的连续编排特性。这种方法简单、高效,特别适合于确定输入为数字字符的场景。在实际编程中,我们可以根据不同的需求和场景,选择最合适的字符转数字的方法。对于简单的单个数字转换,char - '0'无疑是最佳选择;而对于可能包含非数字字符的输入,或需要更多错误处理的场景,其他方法可能更为合适。希望本文能帮助你更好地理解Java中字符和数字之间的转换原理!参考资料Character类ASCII码对照表。
2025-05-07 22:18:30
951
原创 MySQL 窗口函数入门到精通
首先,SQL 中的"窗口"不是像 Windows 操作系统上那种可以拖动的界面框!这是很多初学者的误解。功能:返回窗口框架中最后一行的值。语法LAST_VALUE(列名) OVER ([PARTITION BY 列名] ORDER BY 列名 [窗口框架])重要提示:LAST_VALUE 默认窗口框架是"从头至当前行",要获取真正的最后值,需要显式设置窗口框架为整个分区。示例SELECTname,class,score,结果王五 | 一班 | 78 | 92张三 | 一班 | 85 | 92。
2025-05-06 13:41:46
775
原创 什么是原码、反码与补码?
最高位为符号位:0代表正数,1代表负数其余位表示数值的绝对值正数的反码等于其原码负数的反码是符号位保持不变,其余位按位取反正数的补码等于其原码负数的补码等于其反码加1(或者直接从原码取反后加1)移码是在真值(实际值)的基础上加上一个偏移量(通常是2^(n-1))后得到的编码。原码是最直观的表示方法,但在运算中不方便反码改进了部分问题,但仍存在两个零的表示补码解决了大多数问题,是现代计算机普遍采用的方案移码主要用于浮点数表示和比较。
2025-05-05 14:09:36
766
原创 Java 位移运算的详细教程
位移运算是性能优化和底层编程的强大工具。编写更高效的代码理解和处理低级数据结构处理特定领域问题(如图形、加密、网络)阅读和理解现有系统的底层实现虽然在日常应用开发中可能不是必须的,但在性能敏感或底层系统编程中,这些技巧是不可或缺的工具。在并发编程中的原子位操作在JNI和本地代码中的位操作性能比较SIMD指令和位操作的结合不同JVM实现对位操作的优化程度研究。
2025-05-05 14:05:39
1165
原创 Java接口全面教程:从入门到精通
基础特性定义抽象方法(必须由实现类实现)声明常量(隐式实现多重继承机制Java 8 增强默认方法(带实现的接口方法)静态方法(属于接口本身的方法)函数式接口(支持 Lambda 表达式)Java 9 增强私有方法(增强接口内部代码复用)关键优势定义类型而非实现支持多重继承促进松散耦合简化系统演化理解接口的这些特性和最佳实践,将帮助你写出更灵活、更易维护的 Java 代码。无论是初学者还是有经验的开发者,掌握接口都是提高 Java 编程能力的关键步骤。参考资料。
2025-05-03 23:06:29
1108
原创 【算法基础】快速排序算法 - JAVA
分治思想:快速排序采用分治策略,通过分区操作将问题分解为子问题基准选择:基准元素的选择直接影响算法效率,好的选择可以避免最坏情况就地排序:快速排序是一种原地排序算法,不需要额外的数组空间不稳定性:快速排序不是稳定排序算法,相同元素的相对顺序可能改变。
2025-05-03 21:00:48
953
原创 【算法基础】插入排序算法 - JAVA
插入排序是一种简单但实用的排序算法数据规模较小数据已经部分有序需要稳定排序需要在线处理数据虽然在最坏情况下时间复杂度为O(n²),但其简单性和在特定场景下的优势使其成为实际应用中的重要选择。在标准库中,很多高级排序算法在处理小规模子数组时,会转而使用插入排序,因为此时插入排序的常数因子优势明显。
2025-05-03 19:14:50
530
原创 【算法基础】三指针排序算法 - JAVA
三指针排序是一种特殊的分区排序算法,通过使用三个指针同时操作数组,将元素按照特定规则进行分类和排序。这种算法在处理包含有限种类值的数组时表现出色,最经典的应用是荷兰国旗问题三指针排序算法是一种高效、简洁的算法,特别适合处理有限种类值的排序问题。核心要点一次遍历完成排序原地操作,不需要额外空间线性时间复杂度O(n)特别适合处理三种不同元素的排序问题优点简单易实现高效(一次遍历)空间利用率高(原地操作)稳定性可控缺点仅适用于处理有限种类元素的排序需要明确定义元素的优先级或类别。
2025-05-02 23:16:03
1237
原创 【算法题】荷兰国旗问题[力扣75题颜色分类] - JAVA
本题是经典的「荷兰国旗问题」,由计算机科学家 Edsger W. Dijkstra 首先提出。如同图中所示的荷兰国旗,其由红、白、蓝三色水平排列组成。在算法领域,该问题可类比为将一个由特定的三种元素(可抽象对应红、白、蓝)组成的数组,通过特定算法实现元素的有序排列,使得相同元素相邻,且按照类似荷兰国旗颜色顺序的规则分布。
2025-05-02 23:07:11
601
原创 【算法基础】选择排序算法 - JAVA
选择排序首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序是一种简单直观的排序算法,核心思想是不断从未排序区域中选择最小元素放入已排序区域。核心要点时间复杂度始终为 O(n²),无论输入如何空间复杂度为 O(1),是一种原地排序算法交换次数较少,最多进行 n-1 次交换实现简单,代码易于理解和编写对于大型数据集不推荐使用。
2025-05-02 22:13:06
1349
原创 【算法基础】冒泡排序算法 - JAVA
冒泡排序是一种简单直观的比较排序算法。它重复地走访待排序的数列,依次比较相邻两个元素,如果顺序错误就交换它们,直到没有元素需要交换为止。
2025-05-02 21:11:49
698
原创 【基础算法】分块查找算法 - JAVA
分块查找(Block Search,也称索引顺序查找)是一种介于顺序查找和二分查找之间的算法。它将数据分成若干块,每块内的元素不必有序,但块与块之间必须有序,即前一块中的最大值小于后一块中的最小值。这种算法通过先确定目标在哪个块中,再在特定块内进行顺序查找,结合了顺序查找的简单性和二分查找的高效性。分块查找是一种介于顺序查找和二分查找之间的算法,通过将数据分块并建立索引表来提高查找效率。它的时间复杂度为O(√n),虽然不如二分查找,但在某些特定场景下(如数据频繁变动、外存数据访问等)具有独特优势。核心要点。
2025-05-02 02:27:35
1057
原创 【算法扩展】斐波那契查找算法 - JAVA
斐波那契查找是一种在有序数组中进行查找的算法,它与二分查找类似,但使用斐波那契数列来确定分割点。算法的核心思想是将查找区间按照黄金分割比例(约0.618)进行划分,而不是像二分查找那样均分为二。这种分割方式在某些场景下可以获得更好的性能。斐波那契查找是一种利用黄金分割原理的查找算法,它按照斐波那契数列的特定比例划分查找区间。虽然与二分查找时间复杂度相同,但在某些特定场景下可能更有效率。这种算法展示了如何利用数学性质优化搜索过程,是算法设计思想的一个很好例证。
2025-05-01 17:42:44
925
原创 【基础算法】插值查找算法 - JAVA
插值查找(Interpolation Search)是二分查找的改进版本,针对有序数据分布较为均匀的情况进行了优化。它不像二分查找固定选择中间位置作为比较点,而是根据查找关键字在数据集中的大致位置进行"猜测",从而更快地缩小查找范围。插值查找的核心思想是利用线性插值公式计算目标值可能出现的位置,特别适合于分布均匀的有序数组。插值查找是一种在二分查找基础上的优化算法,通过估计目标值的相对位置来加速查找过程。它的核心在于利用数据分布信息使每次比较更有针对性,在均匀分布的大规模数据集上表现优异。核心要点核心公式。
2025-05-01 17:27:53
940
原创 【基础算法】二分查找算法 - JAVA
二分查找(Binary Search)是一种高效的查找算法,专门用于在已排序数组中查找特定元素。其核心思想是将查找区间反复折半,每次将目标值与区间中点元素比较,从而确定目标元素位于中点左侧还是右侧,直至找到目标元素或确定其不存在。二分查找的前提条件是数据必须有序排列且能够通过索引直接访问,常用于大规模数据的快速检索。// 关键点:继续在右侧寻找} else {if (result!= -1) {
2025-05-01 16:14:06
703
原创 JAVA中的贪婪爬取和非贪婪爬取
贪婪模式(如ab+:尽可能匹配最多的b,适合需要捕获最大范围的场景。非贪婪模式(如ab+?:尽可能匹配最少的b,适合需要精确匹配最小单元的场景。在"abbbbbbb"示例中,贪婪模式匹配整个字符串,非贪婪模式只匹配"ab"。
2025-04-27 18:54:50
287
原创 Mysql中隐式内连接和显式内连接的区别
有学生表(包含学生 ID 和姓名)和成绩表(包含学生 ID 和成绩),内连接会返回那些在两张表中学生 ID 匹配的记录。内连接是数据库中一种常见的连接方式,用于从两个或多个表中返回满足连接条件的记录,即只返回两张表中匹配的行。
2025-04-27 17:11:17
519
原创 Java中正则表达式使用方法
正则表达式(Regular Expression,简称 Regex)是一种用于匹配字符串的模式工具。在 Java 中,正则表达式通过PatternMatcher正则表达式可以用来验证格式、提取信息或替换文本,例如检查邮箱地址是否合法、提取字符串中的数字、按规则分割字符串等。
2025-04-24 10:37:50
891
原创 URI、URL与URN详解概念介绍
URI是最广泛的概念,是资源的标识符URL是URI的一种,提供资源的位置和访问方式URN也是URI的一种,提供资源的永久标识,与位置无关。
2025-04-23 21:30:36
740
原创 什么是时间复杂度和空间复杂度?
时间复杂度:衡量代码运行时间随输入规模增大而增长的速度。简单来说,就是“代码跑多快”。空间复杂度:衡量代码运行时额外占用的内存空间随输入规模增大而增长的速度。简单来说,就是“代码用多少内存”。我们通常用大 O 表示法(Big O Notation)来描述它们,如 O(1)、O(n)、O(n²) 等。时间复杂度:主要看循环层数和递归模式。一眼看出靠经验,不能看出时数循环或分析递推式。空间复杂度:主要看额外分配的数据结构和递归深度。一眼看出靠观察变量和结构,不能看出时计算空间使用。建议。
2025-04-15 22:59:54
1017
原创 如何完美解决 libpng warning: iCCP: known incorrect sRGB profile
问题背景最近在开发一个小游戏的时候,遇到了一个烦人的警告:经过多次尝试,我总结了两个步骤来彻底解决这个问题:修复图片 和 优化代码。运行以下命令 -strip 会移除 background.png 中的所有元数据,包括有问题的 iCCP 块。理后,重新运行程序,警告消失!方法 2:将 PNG 转换为 JPG(避开 PNG 处理)
2025-04-14 10:43:26
1843
原创 【基础算法】递推算法 - java
递推算法是一种通过已知条件,利用明确的递推关系逐步推导中间结果,最终得出最终答案的算法。它分为顺推和逆推两种形式:顺推是从初始条件出发,逐步向前推导;逆推则是从最终结果的关联条件出发,反向推导。递推算法的关键在于找到递推关系式,其思想简洁且具有规律性,在数列计算、动态规划初始阶段等场景应用广泛。递推算法是一种基础且实用的算法,它通过逐步推导解决问题,代码实现直观,在许多数学计算和规律性问题中表现出色。尽管它对复杂逻辑的处理能力有限,但在明确递推关系的场景下,仍是高效且简洁的选择。
2025-04-13 14:15:37
432
原创 什么是编译看左边,运行看右边——JAVA
编译看左边,运行看右边”本质上是 Java 多态性的体现:编译器关注代码的静态合法性,而运行时则根据对象的真实类型动态决定行为。这种机制让 Java 在面向对象编程中更加灵活和强大。
2025-04-10 11:39:00
397
原创 什么是OOP(面向对象编程)
OOP(面向对象编程)指的是在面向对象编程(Object-Oriented Programming)中应该遵循的设计原则,包括了基本概念(EIPA)以及更多的设计原则(如SOLID原则)。
2025-04-08 11:04:01
220
原创 Java中的接口与抽象类:简单理解与应用
接口是一种完全抽象的类型,用于定义一组行为规范。它包含方法的签名(方法名和参数列表),但通常不提供具体实现(Java 8之前)。实现接口的类必须提供这些方法的具体实现。抽象类是一种不能直接实例化的类,通常作为其他类的父类。它可以包含抽象方法(无具体实现)和具体方法(有实现)。接口:用于定义行为规范,支持多实现,适合定义标准化的行为契约。抽象类:用于提供代码复用和行为模板,支持单继承,适合有继承关系的类。通过本文的讲解和示例,相信你已经对接口和抽象类的区别与应用场景有了更深入的理解。
2025-04-07 10:03:34
1022
原创 Java 中构造方法与 this 关键字的正确使用
构造方法的目的:初始化当前对象的状态,而不是创建新对象。this 的正确用法this.name:访问当前对象的成员变量。this("参数"):调用同一类中的其他构造方法,实现代码复用。不能用类名调用构造方法:Student("默认姓名", 18);会导致编译错误或创建新对象,违背构造方法的初衷,可能引发逻辑错误或资源浪费。
2025-04-06 17:50:23
1279
原创 MySQL 约束
约束(Constraints)是 MySQL 中用来限制表中数据的规则,确保数据的准确性和完整性。下面是常见的约束类型及其介绍。
2025-04-01 09:47:50
830
原创 RDBMS与非RDBMS的区别
RDBMS(关系型数据库管理系统):以表格形式存储数据,MySQL就是典型代表。非RDBMS(非关系型数据库,通常叫NoSQL):不使用表格,存储方式更灵活,比如键值对、文档等。
2025-03-31 23:35:40
251
原创 Java 继承全面解析:特点、细节与底层原理
继承是 Java 面向对象编程(OOP)的三大特性之一(另外两个是封装和多态)。通过继承,一个类(子类)可以复用另一个类(父类)的属性和方法,减少代码重复,提高复用性。关键字extends语法class 子类 extends 父类 {// 子类自己的成员。
2025-03-31 10:51:41
810
原创 Java 中 this 关键字的底层原理
this的本质:一个指向当前对象引用的变量,值为调用者的内存地址。底层机制:JVM 通过字节码隐式传递this,无需开发者手动操作。使用场景:访问当前对象的属性、方法,或解决命名冲突。
2025-03-31 10:15:57
638
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人