- 博客(62)
- 收藏
- 关注
原创 多线程的基本概念解析与实现方式(Java)
本文系统梳理了进程、线程及其相关概念,重点分析了多线程在Java中的实现方式。进程是资源分配的基本单位,拥有独立内存空间;线程是CPU调度的最小单位,共享进程资源。多线程能够提升系统性能,简化通信,但需注意线程安全问题。文章详细介绍了Java中实现多线程的三种方式:继承Thread类、实现Runnable接口(推荐)和实现Callable接口配合Future获取返回值。通过对比各方式优缺点,为开发者提供了选择建议,强调了Runnable接口在实践中的优势地位。
2025-09-14 13:53:30
660
原创 Java学习之——“IO流“的进阶流之打印流的学习
摘要:Java打印流(PrintStream和PrintWriter)是强大的输出工具,提供自动刷新、异常处理等功能。PrintStream处理字节流,PrintWriter处理字符流并支持编码设置。两者都支持多种数据类型输出、格式化(如printf)和错误检查(checkError)。典型应用包括文件输出、系统输出重定向和格式化文本生成,能有效简化IO操作并提升代码可读性。通过示例展示了基础输出、格式化、异常处理等核心用法,是Java开发中高效处理输出的重要工具。
2025-09-12 20:19:54
483
原创 Java学习之——“IO流“的进阶流之压缩流的学习
Java 的压缩流并不是一种独立的流,而是一组的过滤流(处理流)。它们“装饰”在基本的字节流之上,在写入数据时自动进行压缩,在读取数据时自动进行解压缩。:在IO传输过程中,动态地对字节数据进行压缩或解压,从而节省存储空间或网络带宽。ZIP 压缩流是 Java 中处理 ZIP 格式文件的核心 API,它允许我们以编程方式创建、读取和修改 ZIP 压缩文件。Java 处理 ZIP 文件主要依赖于ZipEntryZipFile。
2025-09-12 18:29:58
1075
原创 Java学习之——File类详解
Java中的File类用于处理文件和目录路径,位于java.io包中。它提供构造方法创建内存中的路径对象,支持绝对/相对路径、父/子路径组合以及URI形式。File类的主要功能包括:获取文件/目录信息(名称、路径、大小等)、判断状态(是否存在、可读写等)以及操作文件/目录(创建、删除、遍历等)。常用方法如exists()、createNewFile()、mkdirs()、listFiles()等,但需注意它只能操作文件元数据而非内容。示例展示了如何创建File对象、检查状态、获取文件信息、遍历目录等操作。使
2025-09-12 15:20:36
867
原创 Java学习之——“IO流“的进阶流之序列化流的学习
序列化是将对象转换为字节序列以存储或传输,反序列化则是将字节序列恢复为对象。Java中通过实现Serializable接口实现序列化,建议显式声明serialVersionUID确保兼容性,用transient标记不序列化的字段。使用ObjectOutputStream和ObjectInputStream进行序列化和反序列化操作。注意事项:静态变量不参与序列化,引用类型字段也需可序列化,反序列化时不调用构造方法。主要用于数据持久化和网络传输场景。
2025-09-09 19:08:02
910
原创 Java学习之——“IO流“的进阶流之转换流的学习
在博主的上一篇博文中,详细的介绍了“IO”流中最基本的一些知识,包括基本的常见的字节流和字符流,以及对应的缓冲流,对于“IO”流基础知识相对薄弱的同学可以先去看博主的上一篇博文后在回头来看这篇进阶文章效果会更好。Java IO流中的“进阶”流:转换流、序列化流、打印流和压缩流。它们构建在基础字节流和字符流之上,提供了更强大、更便捷的功能。
2025-09-09 18:08:48
1211
原创 Java学习之——万字详解“IO流”中基本的字节流和字符流
Java IO流是处理输入输出的核心机制,分为字节流和字符流。字节流(InputStream/OutputStream)处理二进制数据,子类包括FileInputStream、BufferedInputStream等;字符流(Reader/Writer)处理文本数据,子类包括FileReader、BufferedReader等。缓冲流(BufferedXXX)通过内置缓冲区显著提升IO效率。输出流支持覆盖/追加模式,必须显式关闭以确保数据写入。字符流需注意编码问题,推荐使用UTF-8。典型应用包括文件读写、
2025-09-09 00:24:04
1426
原创 Java进阶学习之Stream流的基本概念以及使用技巧
摘要:Java8 Stream流是函数式数据处理API,通过管道操作高效处理集合数据。其核心特点包括无存储、函数式风格、延迟执行和链式调用。Stream由数据源、中间操作(filter/map/sorted等)和终端操作(collect/forEach等)组成。使用流程:先创建流(集合/数组/直接创建),再链式调用中间操作进行过滤/映射/排序等,最后执行终端操作获取结果。实战技巧包括避免嵌套循环、使用并行流加速处理、短路优化及分组分区等。合理使用Stream可使代码简洁性提升50%以上,但需注意流的一次性消
2025-08-14 17:34:28
739
原创 Java集合学习之forEach()遍历方法的底层原理
本文分析了Java集合中forEach()方法的实现原理。forEach()基于函数式接口Consumer和迭代器模式,通过lambda表达式实现元素遍历操作。ArrayList和HashMap等集合类重写了forEach()方法以提升性能,分别采用数组直接遍历和桶数组遍历方式。与Stream API的forEach()不同,集合的forEach()保证遍历顺序。文章通过源码分析揭示了forEach()的工作机制,指出其本质是通过Consumer接口的accept方法实现回调,并以增强for循环完成遍历。理
2025-08-12 23:33:53
385
原创 Java进阶学习之不可变集合
Java不可变集合是指创建后内容不可修改的集合,具有线程安全、内存高效等优势。文章介绍了两种创建方式:Java9+的List.of()/Set.of()/Map.of()方法直接创建真不可变集合,以及Java8及之前使用Collections.unmodifiableXXX()创建视图(依赖原集合)。对比分析了两种方式的区别,并演示了与可变集合的转换方法。适用场景包括配置信息、多线程共享数据等。重点指出Java9+的of()方法创建的是真正不可变的集合,而unmodifiableXXX()会随原集合改变。掌
2025-08-12 21:56:28
1369
原创 Java学习 -- 可变参数与Collections工具类
Java可变参数(Varargs)允许方法接受不定数量参数,使用"..."语法,需作为最后一个参数。优点在于代码简洁灵活,但存在性能开销和重载歧义风险。Collections工具类提供静态方法操作集合,包括排序(sort)、查找(binarySearch)和替换(replaceAll)等功能。二者可结合使用,如利用可变参数创建集合。使用时需注意类型安全、性能影响和方法重载问题。
2025-08-11 23:33:17
730
原创 Java学习进阶Map接口下的实现类详解
本文对比分析了Java中Map接口的三种主要实现类:HashMap、LinkedHashMap和TreeMap。HashMap基于哈希表实现,提供O(1)的操作性能但不保证顺序;LinkedHashMap继承HashMap并维护双向链表,支持插入顺序或LRU访问顺序;TreeMap基于红黑树实现按键排序,提供O(logn)操作和范围查询功能。文章通过代码示例展示了各类的使用场景和特性差异,包括哈希冲突处理、LRU缓存实现和自定义排序等。不同实现类在性能、顺序性和线程安全性方面各有侧重,开发者可根据需求选择最
2025-08-11 17:09:13
492
原创 Java进阶之双列集合Map接口下的通用方法
摘要:Java中的Map接口是处理键值对集合的核心工具,具有键唯一、值可重复、多数实现无序的特点。它提供put()/get()等基础方法实现增删查改操作,支持通过keySet()/values()/entrySet()三种方式遍历元素。HashMap是常用的无序实现,LinkedHashMap和TreeMap则提供有序支持。Map在Java集合框架中占据重要地位,广泛应用于数据存储和快速查找场景。
2025-08-11 16:22:47
571
原创 Java进阶之单列集合Set接口下的通用方法
本文介绍了Java集合框架中的Set接口及其常见实现类。Set接口继承自Collection,主要特点是不允许重复元素且无序(HashSet)或有序(TreeSet、LinkedHashSet)。文章详细讲解了Set的核心方法:添加(add/addAll)、删除(remove/clear)、检查(contains/isEmpty)等操作,并通过代码示例展示了这些方法的使用。同时比较了三种主要实现类:基于哈希表的HashSet(无序高效)、维护插入顺序的LinkedHashSet和基于红黑树的TreeSet(
2025-08-10 22:55:11
721
原创 Java学习进阶 -- 泛型的继承和通配符及综合练习
本文探讨了Java泛型与继承的关系。核心内容包括:1)泛型本身不具备继承性,即使A是B的子类,Generic<A>也不是Generic<B>的子类;2)泛型容器中的元素仍遵循继承规则;3)通过三种通配符(无界<?>、上界<? extends T>、下界<? super T>)在泛型中实现类型安全操作。文中通过Animal/Dog示例演示了泛型容器如何使用继承关系,并强调了通配符在连接泛型与继承体系中的作用,以及编译时类型安全检查的重要性。
2025-08-10 16:37:00
340
原创 Java学习进阶 -- 泛型编程
Java泛型是Java5引入的重要特性,通过类型参数化实现编译时类型安全检查和代码复用。主要内容包括:1)核心概念:类型参数化(如<T>)和类型擦除机制;2)泛型类:定义带类型参数的类(如Box<T>),可创建类型安全容器;3)泛型方法:独立于类的类型安全方法(如<T> void printArray),支持类型推断;4)泛型接口:带类型参数的接口,实现类可指定具体类型。泛型能够消除强制类型转换,避免ClassCastException,提高代码重用性和安全性。
2025-08-10 16:00:40
424
原创 Java进阶之单列集合List接口下的通用方法
Java List接口是集合框架中的有序集合,支持元素重复和索引访问。本文详细介绍了List的核心特性:有序性、允许重复元素、继承自Collection接口及允许null值。重点讲解了List特有的索引操作方法(add/get/set/remove等)并提供了完整示例代码。文章还对比了五种遍历方式,特别分析了普通for循环和ListIterator的适用场景及特点,同时提及了迭代器、增强for循环和forEach方法。最后提醒注意remove方法的重载问题,区分按索引删除和按对象删除的不同用法。
2025-08-09 22:59:41
875
原创 Java学习进阶--集合体系结构
Java集合框架是Java核心库中用于存储和操作数据的重要组件,主要分为单列集合Collection和双列集合Map两大分支。Collection包括List(有序可重复)、Set(无序唯一)和Queue(队列)等子接口,提供丰富的操作方法如增删改查和迭代遍历。Map用于存储键值对,强调键的唯一性和快速查找,常见实现类有HashMap、TreeMap等。本文详细介绍了Collection和Map的核心概念、常用方法及实现类特性,并提供了代码示例演示集合的基本操作和遍历方式。掌握集合框架对Java开发者至关重
2025-08-08 23:09:33
1417
原创 Java学习Collection单列集合中的三种通用遍历方法
Java集合遍历方法摘要:Collection接口提供多种遍历方式:1.迭代器遍历(Iterator/ListIterator)支持安全删除元素,通过hasNext()/next()方法实现;2.增强for循环(Java5+)简化语法,编译器自动转换为迭代器或数组遍历;3.Lambda表达式(Java8+)使用forEach方法,支持函数式编程风格。不同方式各有特点:迭代器最灵活但代码量多,增强for最简洁,Lambda适合函数式处理。注意迭代器遍历时不能直接修改原集合。
2025-08-08 23:01:23
595
原创 Java基础之匿名内部类与lambda表达式
本文介绍了Java中匿名内部类和Lambda表达式两个重要概念。匿名内部类是一种没有显式名称的内部类,适用于一次性使用的场景,可以基于接口或类实现,但语法较冗长。Lambda表达式是Java8引入的简洁语法,专为函数式接口设计,大大简化了代码。关键区别在于:匿名内部类适用于非函数式接口或需要继承类的情况,而Lambda表达式更适用于简单的函数式接口实现。建议在函数式接口场景优先使用Lambda表达式,其他情况考虑匿名内部类。两者共同提升了Java代码的简洁性和表达能力。
2025-08-08 16:09:16
1288
原创 Java接口(Interface)的使用和基础知识的讲解
Java接口是一种完全抽象的类型,用于定义类必须实现的行为规范。它具有以下特点:1)纯抽象性(Java8前仅含抽象方法和常量);2)支持多继承(类可多实现接口);3)提供行为契约(定义"做什么"而非"怎么做")。语法包含常量、抽象方法(默认public abstract)、默认方法(Java8+)、静态方法(Java8+)和私有方法(Java9+)。接口不能直接实例化,必须通过实现类、匿名内部类或Lambda表达式使用。相比抽象类,接口更侧重行为规范,支持多继承,不包
2025-08-08 14:10:33
447
原创 Java中数组以及操作数组的工具类Arrays
本文介绍了Java中数组的基本概念和关键操作。数组是固定长度、同类型元素的连续存储结构,通过索引访问。重点讲解了数组的声明与初始化方式(动态/静态初始化),以及多维数组的使用。文章详细说明了数组的常见操作(获取长度、遍历)和异常(越界、空指针),并介绍了Arrays工具类的重要功能:数组转字符串、排序、二分查找、填充、比较和复制等。最后强调了操作自定义类对象数组时的注意事项,如需要重写toString()方法、浅拷贝问题以及排序时必须提供比较规则等。
2025-08-08 00:07:12
509
原创 Java快速入门:包(Package)与导包(import)详解
本文系统介绍了Java包(Package)的核心概念与应用。主要内容包括:1)包的作用(避免命名冲突、组织管理类、实现封装等)和命名规范;2)包的定义方式与目录结构要求;3)三种导包方法(单个类导入、整个包导入、完全限定名)及适用场景;4)特殊导包情况处理(静态导入和同名类冲突解决方案);5)Java核心功能包概览;6)典型项目结构示例。文章特别强调包在模块化开发中的重要性,以及java.lang包的自动导入特性,为Java开发者提供了清晰的包管理指南。
2025-08-07 23:19:19
843
原创 数据结构与算法之广度优先搜索算法--算法竞赛蓝桥云课3511题飞机降落详解
摘要:本文介绍了广度优先搜索(BFS)算法,包括其核心思想、特点(层次遍历、最短路径查找、队列驱动)和实现步骤。提供了BFS的伪代码,并给出一个飞机降落调度问题作为练习,要求判断多架飞机是否能安全降落。参考答案使用深度优先搜索(DFS)来尝试所有可能的降落顺序,通过递归回溯寻找可行解。该问题涉及时间窗口约束,需要合理安排各飞机的降落时间以避免冲突。
2025-08-07 18:40:36
1155
原创 人工智能与机器学习基本概念知识入门
人工智能(AI)是让机器模拟人类智能的科学与技术,涵盖机器学习、深度学习、计算机视觉等子领域。其发展经历了从专家系统到深度学习的演进,现广泛应用于医疗、金融、交通等行业。AI核心三要素为:数据(燃料)、算法(大脑)和算力(发动机)。机器学习工作流程包括数据处理、特征工程、模型训练与评估。根据任务类型,算法可分为监督学习(分类/回归)、无监督学习(聚类/降维)、半监督学习和强化学习,并通过准确率、召回率、RMSE等指标评估性能。高质量数据与合适算法的结合推动着AI技术的持续突破。
2025-08-07 14:12:09
1623
1
原创 机器学习之线性回归的入门学习
线性回归是一种用于预测连续值的监督学习算法,通过建立特征与目标变量之间的线性关系进行建模。其核心是找到最优权重系数,最小化预测值与真实值的误差(常用均方误差损失函数)。模型形式包括简单线性回归(单特征)和多元线性回归(多特征),可通过梯度下降或正规方程求解。优点在于简单高效、可解释性强,适合作为基准模型;缺点是对非线性关系、异常值和多重共线性敏感,依赖特征工程。扩展应用包括多项式回归等变体,核心要求是模型对参数保持线性。
2025-07-30 23:40:07
1008
原创 使用python中的 GridSearchCV( ) 快速完成交叉验证+网格搜索实现调优
本文介绍了使用Scikit-learn中的GridSearchCV进行机器学习模型调优的方法。GridSearchCV通过交叉验证和网格搜索自动寻找最优超参数组合,确保模型性能从"能用"提升到"卓越"。文章详细解析了其核心功能、关键参数及结果获取方式,并以KNN算法和鸢尾花数据集为例演示了完整流程,包括数据预处理、参数网格定义、模型训练和评估。GridSearchCV的优势在于参数搜索的全面性、结果客观性以及工作流简化,是提升模型性能的高效工具。
2025-07-30 01:56:44
2093
原创 K-近邻算法(KNN算法)的K值的选取--交叉验证+网格搜索
摘要:KNN算法中K值选择直接影响模型性能,需通过交叉验证和网格搜索进行优化。交叉验证通过多次数据划分评估模型泛化能力,避免过拟合;网格搜索则系统遍历参数组合寻找最优解。二者协同工作流程包括:定义参数网格、遍历参数组合、交叉验证评分、选择最优参数及最终测试评估。案例展示了如何使用交叉验证评估K值性能,网格搜索优化多参数(K值、权重、距离度量),并可视化结果。这种方法能有效平衡偏差-方差,提升模型在新数据上的预测能力。
2025-07-29 23:48:18
1234
1
原创 机器学习算法—— K-近邻算法
K-近邻算法(KNN)是一种基于距离度量的监督学习算法,通过计算待测样本与训练数据的最近邻距离进行分类预测。本文介绍了KNN的核心原理、Scikit-learn实现方法、优化搜索效率的KD树结构以及关键参数K值的选择策略。KNN具有简单直观、无需训练等优点,但也存在计算成本高、对特征尺度敏感等缺点。文中通过Iris数据集案例展示了KNN的完整应用流程,包括数据预处理、模型训练与评估。该算法适用于低维分类和回归问题,但在处理高维大数据时需谨慎使用。
2025-07-29 18:20:51
1222
原创 python中类变量 __slots__ 解析
在 Python 中,__slots__ 是一个特殊的类属性,用于显式声明类实例允许的属性集。它通过替代默认的 __dict__ 字典存储机制,提供了内存优化和访问速度提升。是 Python 中优化内存和性能的重要工具,适用于大规模实例场景。后,实例通过固定大小的数组存储属性,显著减少内存开销(约 40-50%)。:防止意外添加属性(类似 "final" 类)。:直接通过数组偏移量访问属性,比字典查找更快。仅限制实例属性,类属性可正常使用。:普通类实例的属性存储在动态字典。中声明的属性,避免意外属性赋值。
2025-07-28 22:07:15
873
原创 python对象的__dict__属性详解
场景推荐做法风险做法属性访问使用点号操作obj.attr直接操作动态属性使用直接修改__dict__序列化实现方法直接使用__dict__序列化调试使用vars(obj)函数直接访问。
2025-07-28 21:56:28
867
原创 模拟实现python的sklearn库中的Bunch类以及 load_iris 功能
本文通过模拟实现sklearn库中的Bunch类及load功能,帮助读者理解机器学习数据加载机制。文章首先演示了原始load_iris()函数的使用,展示了其返回的Bunch对象特性。随后详细介绍了Bunch类的核心功能:作为字典子类,允许通过属性访问数据集的特征数据(data)、标签(target)等关键属性。文中提供了Bunch类的模拟实现代码,解释其继承字典、支持属性访问的实现原理,并以鸢尾花数据集为例说明其用法。该教程适合正在学习机器学习基础及sklearn库使用的读者,建议结合作者前期关于Pyth
2025-07-27 23:08:43
1130
1
原创 python中的容器与自定义容器
Python提供了多种内置容器(列表、元组、字典、集合)用于数据存储和组织,支持索引、修改等操作。用户可通过实现__len__、__getitem__等特殊方法创建自定义容器类,或继承collections.abc模块的抽象基类来确保容器行为规范。自定义容器能实现特定需求的数据结构,与内置容器配合使用可构建高效的数据处理方案。
2025-07-27 19:31:42
907
原创 python中的容器和对象
用于组织和管理其他对象(元素)。:对象的唯一标识(内存地址):提供访问内部元素的方法。容器实际存储的是对元素的。在 Python 中,:决定对象的操作和行为。:可包含一个或多个对象。:对象存储的实际数据。:可通过循环遍历内容。
2025-07-27 14:27:56
408
原创 sklearn库中有关于数据集的介绍
Scikit-learn提供了丰富的内置数据集,涵盖分类、回归和聚类任务。常用分类数据集包括鸢尾花(150样本4特征)、手写数字(1797样本64特征)和乳腺癌数据集(569样本30特征)。回归任务常用加利福尼亚房价(20640样本8特征)和糖尿病数据集(442样本10特征)。聚类可使用合成斑点数据或鸢尾花数据集。其他数据集如葡萄酒(178样本13特征)和新闻分类(18000文本样本)也很实用。通过load_*函数加载数据,可用DESCR查看详情,适合快速开发测试。
2025-07-26 17:10:19
1393
原创 一文搞定K-近邻算法中有关于常见的距离度量的计算方法和解析
文章摘要 本文系统介绍了多种常用的距离度量方法及其应用场景。欧氏距离计算多维空间两点间的直线距离,曼哈顿距离采用坐标轴绝对差之和,切比雪夫距离取坐标差的最大绝对值。闵可夫斯基距离作为广义度量,通过参数p控制不同距离计算方式。标准欧氏距离通过特征标准化解决量纲问题。余弦距离衡量向量方向差异,适用于文本分析等场景。此外还介绍了汉明距离(字符串差异)、杰卡德距离(集合差异)和马氏距离(考虑协方差结构)。每种距离都附有数学定义、几何解释和Python实现示例,为不同数据分析场景提供了全面的距离计算参考。
2025-07-25 16:01:14
1873
原创 前端学习之JavaScript事件监听解析
本文介绍了JavaScript事件监听的基本概念和实现方法。事件监听是通过在特定事件发生时执行代码来实现网页交互的机制。文章详细讲解了三种事件绑定方式:HTML内联事件绑定、DOM属性事件绑定和addEventListener()方法绑定,其中推荐使用addEventListener(),它支持多个处理函数绑定和事件阶段控制。此外,还介绍了常见事件类型(鼠标、键盘、表单、窗口事件)及其应用场景,以及事件冒泡与捕获的原理和移除事件绑定的方法。通过代码示例展示了各种事件监听的实际应用,帮助开发者掌握网页交互的核
2025-07-23 17:32:35
739
原创 一篇搞定JavaScript关于对象的内容
本文深入讲解了JavaScript中的对象相关知识,包括自定义对象、JSON对象、BOM对象和DOM对象。详细介绍了四种创建自定义对象的方法(对象字面量、构造函数、ES6类和Object.create()),讲解了JSON对象的parse()和stringify()方法的使用。此外,还解析了BOM对象(Window、Navigator、Screen、History、Location)和DOM对象(DOM树结构、元素获取、节点操作方法等)。文章提供了丰富的代码示例,适合需要深入学习JavaScript对象的开
2025-07-22 22:25:49
875
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅