
Java
文章平均质量分 94
Java混杂文章分类
码到π退休
优快云博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。技术合作请加本人wx(注明来自csdn):foreast_sea
展开
-
深入理解JVM的运行时数据区
本文深入探讨Java虚拟机的内存数据区,程序计数器、Java虚拟机栈、本地方法栈、堆、方法区与元空间!Java 源代码文件经过编译器编译后会生成字节码文件,经过加载器加载完毕后会交给执行引擎执行。在执行的过程中,JVM 会划出来一块空间来存储程序执行期间需要用到的数据,这块空间一般被称为运行时数据区原创 2025-04-04 11:28:01 · 511 阅读 · 0 评论 -
Java 类加载机制详解
Java的类加载机制通过类加载器和类加载过程的合作,确保了Java程序的动态加载、灵活性和安全性。双亲委派模型进一步增强了这种机制的安全性和类之间的协调性。JVM 运行 Java 代码的时候,JVM 需要将编译后的字节码文件加载到其内部的运行时数据区域中进行执行。这个过程涉及到了 Java 的类加载机制(面试常问的知识点),所以我们来详细地讲一讲。原创 2025-04-03 11:28:10 · 552 阅读 · 0 评论 -
Java虚拟机面试题:引言
JVM,也就是Java虚拟机,它是Java实现跨平台的基石。Java程序运行的时候,编译器会将 Java 源代码(.java)编译成平台无关的Java字节码文件(.class),接下来对应平台的JVM会对字节码文件进行解释,翻译成对应平台的机器指令并运行。也就实现了 Java 一次编译,处处运行的跨平台性。原创 2025-04-02 11:28:49 · 366 阅读 · 17 评论 -
Java:编程世界的常青树,未来仍大有可为
虽然 Java 面临着新兴语言的挑战,但它在编程世界中的核心地位并未被撼动。其成熟的生态系统、在企业级应用、安卓开发、大数据与分布式系统 等核心领域的不可替代性,以及在新兴技术融合方面的积极探索,都表明 Java 仍然是一门极具价值的编程语言,非常值得 Java 爱好者们深入学习和探索。无论是对于想要进入编程领域的初学者,还是希望在现有基础上拓展技术栈的开发者,Java 都将为他们提供丰富的机遇和广阔的发展空间。原创 2025-04-01 11:28:38 · 1007 阅读 · 34 评论 -
Java 应用程序CPU 100%问题排查优化实战
今天再给大家讲一个 CPU 100% 优化排查实战。收到运维同学的报警,说某些服务器负载非常高,让我们开发定位问题。拿到问题后先去服务器上看了看,发现运行的只有我们的 Java 应用程序。于是先用 ps 命令拿到了应用的 PID。 ps:查看进程的命令;PID:进程 ID。ps -ef | grep java 可以查看所有的 Java 进程。前面也曾讲过。接着使用 top -Hp pid 将这个进程的线程显示出来。输入大写 P 可以将线程按照 CPU 使用比例排序,于是得到以下结果。原创 2025-04-01 11:28:07 · 653 阅读 · 5 评论 -
全球地理数据库 GeoNames
GeoNames 作为联合国推荐使用的开放地理数据库,以其独特的架构设计给出了完美答案。这个包含1200万地理实体的知识图谱,不仅提供WGS84坐标系下的精准空间数据,更收录了涵盖287种语言的名称变体,其行政层级关系网更是贯穿国家、省、市、镇四级结构。与商业地图API相比,GeoNames 的本地化部署特性可为金融风控、舆情监控等场景提供完全自主可控的地理数据服务。原创 2025-03-30 11:25:52 · 950 阅读 · 10 评论 -
Java并发编程面试题:线程池&Fork/Join(19题)
线程池,简单来说,就是一个管理线程的池子。①、频繁地创建和销毁线程会消耗系统资源,线程池能够复用已创建的线程。②、提高响应速度,当任务到达时,任务可以不需要等待线程创建就立即执行。③、线程池支持定时执行、周期性执行、单线程执行和并发数控制等功能。原创 2025-03-29 11:28:45 · 787 阅读 · 19 评论 -
Java面试必问的CAS原理剖析
CAS(Compare-And-Swap)是比较并交换的意思,它是一条 CPU 并发原语,用于判断内存中某个值是否为预期值,如果是则更改为新的值,这个过程是原子的。下面用一个小示例解释一下。CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,计算后要修改后的新值B。(1)初始状态:在内存地址V中存储着变量值为 1。(2)线程1想要把内存地址为 V 的变量值增加1。这个时候对线程1来说,旧的预期值A=1,要修改的新值B=2。原创 2025-03-28 11:29:15 · 927 阅读 · 37 评论 -
微服务面试题:配置中心
1. 为什么微服务需要配置中心?微服务架构中的每个服务通常都需要一些配置信息,例如数据库连接地址、服务端口、日志级别等。这些配置可能因为不同环境、不同部署实例或者动态运行时需要进行调整和管理。微服务的实例一般非常多,如果每个实例都需要一个个地去做这些配置,那么运维成本将会非常大,这时候就需要一个集中化的配置中心,去管理这些配置。原创 2025-03-28 11:28:44 · 797 阅读 · 49 评论 -
Java 8 Stream API:传统实现和流式编程的范式对比
声明式编程:聚焦"做什么"而非"怎么做"不变性:避免副作用带来的风险可组合性:通过操作组合实现复杂逻辑延迟执行:优化计算过程并行透明:轻松实现并发处理代码密度:减少60%以上的样板代码可维护性:业务逻辑显式表达。原创 2025-03-17 00:15:00 · 1835 阅读 · 82 评论 -
爬虫的精准识别:基于 User-Agent 的正则实现
想象一个典型的在线客服场景:用户访问网站后,通过 WebSocket 与客服实时沟通。然而,大量爬虫(如搜索引擎索引、SEO 工具、恶意扫描程序)的请求也会触发 WebSocket 连接。这些爬虫不会主动发送消息,却会长期占用连接资源。客服人员看到“在线用户”列表中的爬虫会话,尝试对话却得不到任何回应,最终导致: 资源浪费:服务器带宽、连接数被无效占用。 效率下降:客服需要手动排查“沉默用户”,增加工作负担。 数据污染:统计报表中的“用户活跃数”被虚假流量污染。原创 2025-03-12 00:15:00 · 2605 阅读 · 102 评论 -
深入浅出Java并发编程:线程基础
通过本文的学习,我们详细探讨了Java并发编程中的线程基础,包括进程与线程的区别、线程的创建方式线程的生命周期守护线程与用户线程、以及线程优先级与调度策略。掌握这些基础知识是进一步学习并发编程的关键。在实际开发中,理解并正确使用这些概念可以帮助我们构建高效、稳定的多线程应用。然而,并发编程的复杂性远不止于此,后续我们还将深入探讨线程安全、锁机制、线程通信等高级主题。原创 2025-03-10 15:08:01 · 1445 阅读 · 97 评论 -
Java对接微信支付全过程详解
本文将以系统性、实战性为导向,深入剖析Java对接微信支付的核心流程与关键技术。无论是Native支付、JSAPI支付还是小程序支付,其底层逻辑均围绕预支付订单生成、支付结果异步通知、订单状态主动查询三大核心环节展开。文章不仅提供清晰的代码示例(基于Spring Boot框架与微信支付V3 API),更聚焦于实际开发中的高频痛点:如何通过RSA签名保障通信安全?如何设计幂等回调接口避免重复扣款?如何利用微信平台证书防止伪造请求?这些问题将在文中逐一击破。原创 2025-03-07 21:52:03 · 5881 阅读 · 97 评论 -
CIDR转IP段:原理&Java实现
CIDR(Classless Inter-Domain Routing,无类别域间路由)是一种用于高效分配和管理 IP 地址的网络编址方法。它取代了传统的 IP 地址分类(A/B/C 类),通过灵活的网络前缀长度(子网掩码)实现更精细的地址划分和路由聚合,显著提高了 IP 地址的利用率,并减少了路由表规模。1. 传统 IP 分类的局限性 A/B/C 类地址:传统方式将 IP 地址划分为固定类别(如 A 类:/8,B 类:/16,C 类:/24)。 问题:地址分配不灵活。例如,一个需要 5原创 2025-02-28 14:54:48 · 2230 阅读 · 94 评论 -
IP段转CIDR:原理&Java实现
需要确认CIDR是什么?CIDR表示的是无类别域间路由,通常形式是IP地址后跟一个斜杠和数字,比如192.168.1.0/24。这个数字表示网络前缀的位数,剩下的位数用于主机地址。CIDR的作用是更高效地分配IP地址,减少浪费。我们现在要实现,将给定的起始IP和结束IP转换为CIDR块。那么,如何从两个IP地址中找到覆盖它们的CIDR呢?可能需要分解成多个CIDR块,因为单个CIDR可能无法覆盖整个范围,尤其是当范围不是连续的2的幂次方时。原创 2025-02-28 14:38:20 · 1464 阅读 · 35 评论 -
Java 模板方法模式:打造高复用性的商品上架模块
模板方法模式是一种行为设计模式,它在一个方法中定义了一个算法的骨架,而将一些步骤的实现延迟到子类中。这个模板方法通常是一个抽象类中的 final 方法,它按照特定的顺序调用其他抽象方法,这些抽象方法就是算法中的可变部分,由具体的子类来实现。首先,我们创建一个抽象的商品上架类,它包含了商品上架的基本模板方法以及各个抽象步骤方法。// 抽象商品上架类// 模板方法,定义商品上架的基本流程} else {System.out.println("商品信息不完整,上架失败!");原创 2024-12-13 08:58:57 · 4335 阅读 · 77 评论 -
Java 享元模式:打造高扩展游戏角色模型,优化 MMO 游戏开发
享元模式是一种结构型设计模式,它旨在通过共享对象来减少内存使用和提高性能。其主要思想是将对象的状态分为内部状态和外部状态。创建一个抽象类或接口来表示怪物模型享元对象,该抽象类或接口定义了与怪物模型相关的操作方法。// 怪物模型抽象类// 抽象方法,用于绘制怪物模型在这个示例中,是一个抽象类,它定义了一个抽象方法draw,用于绘制怪物模型。具体的怪物模型类(如)将继承自这个抽象类并实现draw方法。如前面所述,通过共享怪物模型数据(内部状态),大大减少了内存中数据的冗余存储。原创 2024-12-07 11:59:18 · 4081 阅读 · 77 评论 -
Java设计模式之状态模式架构高扩展的订单状态管理
状态模式属于行为型设计模式。它的核心思想是将对象的行为封装在不同的状态类中,当对象的内部状态发生改变时,其行为也会随之改变,而这种改变对于外部使用者来说是透明的。上下文(Context):它是持有状态的对象,通常会定义一个抽象的状态接口,并维护一个当前状态的引用。上下文对象将具体的状态处理委托给当前状态对象。例如在订单管理中,订单对象就是上下文,它包含了订单的基本信息以及当前的订单状态。抽象状态(State):定义了一个接口,用于封装与特定状态相关的行为。在订单状态管理中,这可以是一个名为。原创 2024-12-03 10:48:30 · 1998 阅读 · 28 评论 -
【Java 解释器模式】实现高扩展性的医学专家诊断规则引擎
解释器模式是一种行为设计模式,它定义了一种语言的语法规则,并提供了一个解释器来解释该语言中的语句。在我们的案例中,这种语言就是由各种知识规则组成的规则集。抽象表达式(Abstract Expression):声明一个抽象的解释操作,该操作被具体的子表达式所实现。它是所有具体表达式的父类,定义了统一的接口。终结符表达式(Terminal Expression):实现了抽象表达式接口,代表语言中的终结符,如我们规则中的具体症状(发烧、咳嗽等)。原创 2024-11-24 18:12:18 · 1067 阅读 · 25 评论 -
Bug 编年史:电商项目里那刻骨铭心的事务嵌套 Bug
在程序的浩瀚宇宙中,`Bug` 如同隐匿于星云深处的**黑洞**,看似悄无声息,却蕴含着足以扭曲和吞噬一切的力量。每一位程序员,无论资历深浅,都在与 `Bug` 的持续斗争中砥砺前行,书写着属于自己的传奇与教训。我仍清晰地记得初入编程世界时的那份懵懂与好奇,怀揣着对创造神奇软件的憧憬,一头扎进了代码的海洋。那时,每一行代码的敲击都仿佛是在编织梦想的丝线,然而,`Bug` 这个不速之客很快就打破了这份宁静与美好。从简单的语法错误导致程序无法编译,到逻辑漏洞使得运行结果南辕北辙,这些早期的 `Bug` 就像原创 2024-11-24 10:45:57 · 904 阅读 · 26 评论 -
Java并发CountDownLatch:原理、机制与应用场景
在 Java 并发编程领域是一个不可或缺的工具。通过对其核心原理的深入剖析,我们了解到它基于 AQS 的精妙设计,无论是计数器的管理还是线程的等待与唤醒机制,都展现出了高度的可靠性和高效性。在多种使用场景中,如多线程初始化、并行计算结果汇总以及网络请求协调等,都能发挥关键作用,帮助我们构建更加稳定和高效的多线程应用程序。通过详细的代码示例,我们进一步理解了如何在实际项目中运用。掌握的使用,对于提升我们在复杂并发编程环境下的开发能力具有重要意义。原创 2024-11-19 18:57:26 · 1655 阅读 · 75 评论 -
JDBC 调用带输入和输出参数的存储过程
在 PostgreSQL 中,创建存储过程使用语句(在 PostgreSQL 中,函数和存储过程在很多情况下可以类似地看待,这里我们主要讨论具有输入和输出参数的情况)。-- 输入参数定义-- 更多输入参数...-- 输出参数定义,使用 OUT 关键字$$-- 存储过程体,这里是 SQL 语句和流程控制语句等BEGIN-- 在这里编写存储过程的具体逻辑-- 可以使用输入参数进行计算和操作-- 并将结果赋值给输出参数END;输入参数定义输入参数在括号内定义,格式为,其中是参数的名称,原创 2024-11-21 03:42:51 · 1091 阅读 · 43 评论 -
JavaCV 图像边缘检测 之 Canny 算法
本文详细介绍了JavaCV图像边缘检测之Canny 边缘检测算法。首先阐述了Canny 边缘检测的原理,包括高斯滤波、计算梯度幅值和方向、非极大值抑制以及双阈值检测等关键步骤。然后介绍了在 Java 项目中使用 JavaCV 实现Canny 边缘检测的 Maven 依赖。接着,通过详细的代码示例展示了Canny 边缘检测的每个关键步骤,并对代码进行了注释说明。最后,通过案例分析和图像对比展示了Canny 边缘检测的实际效果。通过本文的学习,读者可以掌握Canny 边缘检测算法。原创 2024-11-07 10:30:43 · 3287 阅读 · 64 评论 -
JavaCV 图像边缘检测 之 Sobel算子 算法
JavaCV 是一个基于 OpenCV 和 FFmpeg 的 Java 计算机视觉库。它提供了对各种计算机视觉算法和图像处理功能的访问,包括图像读取、处理、显示,以及视频处理等。JavaCV 封装了底层的 C/C++ 库,使得在 Java 中进行计算机视觉开发更加方便快捷。本文详细介绍了JavaCV中的Sobel 算子在边缘检测中的应用。从Sobel 算子的原理出发,阐述了一阶导数与边缘检测的关系,以及Sobel 算子的卷积核和边缘检测过程。接着介绍了JavaCV的简介和Maven。原创 2024-11-04 16:00:00 · 3430 阅读 · 59 评论 -
JavaCV 之高斯滤波:图像降噪与细节保留的魔法
高斯滤波作为一种基于高斯函数的加权滤波方法,在图像处理中具有重要的地位。它能够有效地去除图像中的高斯噪声,同时较好地保留图像的边缘和细节。在JavaCV中,我们可以通过简单的代码实现高斯滤波操作,为图像处理任务提供了有力的支持。通过本文的介绍,我们深入了解了高斯滤波的核心思想和原理,掌握了在JavaCV中实现高斯滤波的方法,并通过案例分析展示了高斯滤波的实际应用效果。希望本文能够对读者在图像处理领域的学习和实践有所帮助。原创 2024-11-01 15:37:33 · 1515 阅读 · 49 评论 -
JavaCV 之中值滤波:提升图像质量的有效方法
在图像处理这个广泛而复杂的领域中,噪声一直是一个亟待解决的重要问题。噪声的产生来源众多,例如,在图像采集阶段,传感器可能会受到电子干扰,这种干扰会在图像数据中引入不期望的变化,从而产生噪声;在图像传输过程中,信号可能会发生失真,这也会导致噪声的出现。这些噪声会严重影响图像的质量,降低图像的可用性,无论是在计算机视觉的目标检测、图像识别任务中,还是在普通的图像显示与处理应用场景下。为了改善图像质量,滤波操作成为了图像处理中的一个关键环节。滤波操作旨在通过特定的算法对图像中的像素值进行处理,从而减少或消除噪原创 2024-10-30 08:57:50 · 3463 阅读 · 75 评论 -
JavaCV 之均值滤波:图像降噪与模糊的权衡之道
本文介绍了如何使用 JavaCV 实现均值滤波操作,以及如何在图像降噪和模糊之间找到平衡。我们首先详细介绍了均值滤波的原理和实现方法,并通过代码示例和图片对比展示了均值滤波的效果。最后,我们讨论了如何在实际应用中选择合适的滤波参数,以达到最佳的图像降噪效果。均值滤波是一种简单而有效的图像滤波方法,它可以有效地去除图像中的噪声,但也会使图像变得模糊。为了在图像降噪和模糊之间找到平衡,我们可以调整滤波核大小、进行多次滤波或结合其他滤波方法。原创 2024-10-27 19:43:25 · 3353 阅读 · 85 评论 -
JavaCV 图像灰度化处理
在计算机视觉和图像处理领域,图像灰度化是一项基础且重要的任务。它将彩色图像转换为灰度图像,去除了颜色信息,只保留了图像的亮度信息。这种转换在许多图像处理任务中具有重要意义,如图像边缘检测、图像特征提取等。JavaCV 是一个强大的开源库,它提供了对各种计算机视觉算法和图像处理操作的支持。本文将详细介绍如何使用 JavaCV 进行图像灰度化处理,包括相关的 Maven 依赖、原理讲解、代码示例以及实际效果展示。原创 2024-10-22 11:34:00 · 4480 阅读 · 81 评论 -
深入探索JavaCV:功能强大的Java计算机视觉库
JavaCV是一个开源的计算机视觉库,它建立在Java语言之上,它在Java平台上提供了对各种计算机视觉库(如OpenCVFFmpeg等)的绑定。这意味着Java开发者可以利用JavaCV在Java环境中轻松调用这些强大的底层库的功能。它的设计目的是为了简化计算机视觉任务在Java中的开发过程,使得Java开发者无需深入了解底层库的复杂实现细节,就能够快速构建计算机视觉应用。其起源可以追溯到对将已有的强大计算机视觉库(如OpenCV)和多媒体处理库(如FFmpeg)的功能引入Java生态系统的需求。原创 2024-10-21 00:15:00 · 4363 阅读 · 54 评论 -
Java学习路线:从入门到精通
Java是由Sun Microsystems(现已被Oracle收购)于1995年推出的一种面向对象编程语言。Java的设计初衷是“一次编写,到处运行”,即Java程序可以在任何支持Java虚拟机(JVM)的平台上运行。Java学习路线从基础入门到高级主题,涵盖了Java语言的各个方面。通过系统学习和实战项目,你可以逐步掌握Java编程的核心技能,成为一名优秀的Java开发者。持续学习和社区参与是提升技术水平的关键,希望本文能为你提供有价值的指导和帮助。原创 2024-09-17 02:42:29 · 1540 阅读 · 3 评论 -
模板方法设计模式:Spring框架中八大经典应用场景
综上,可以看出,模板方法设计模式在Spring框架中得到了广泛应用,通过将通用的逻辑封装在基类中,而将具体的业务逻辑留给子类或回调函数实现,模板方法设计模式不仅提高了代码的复用性,还增强了代码的灵活性和可维护性。在Spring框架中,和等类都是模板方法设计模式的典型应用场景。通过这些示例,我们可以看到模板方法设计模式在简化复杂操作、提高代码复用性和灵活性方面的巨大优势。模板方法设计模式。原创 2024-09-13 07:36:49 · 1185 阅读 · 13 评论 -
零到一学Java:访问控制(封装)、继承、多态和组合
访问控制权限又称为,它是面向对象三大特性之一,我之前在学习过程中经常会忽略封装,心想这不就是一个访问修饰符么,怎么就是三大特性的必要条件了?后来我才知道,如果你信任的下属对你隐瞒 bug,你是根本不知道的。访问控制权限其实最核心就是一点:只对需要的类可见。在Java中,访问修饰符用于控制类、方法、变量等的可见性,从而影响它们在不同作用域内的访问权限。以下是public、protected、default(即包级私有)、private这四种访问修饰符的可见性区别:这四种访问修饰符提供了不同级别的访问控制,从原创 2024-09-07 06:00:00 · 1054 阅读 · 9 评论 -
Java基础:命名规范,数据类型和运算符
在上一章节讲述的jdk环境配置,即配置完 Java 开发环境,并下载 Java 开发工具(Eclipse、IDEA 等)后,就可以编写 Java 程序了,因为本教程是从头梳理,从零到一的 Java学习体系,所以有必要从基础的概念开始谈起。基本数据类型基础语法运算符。原创 2024-09-04 06:00:00 · 2218 阅读 · 21 评论 -
Java 内存模型:原子操作与执行规则
在前一段时间,我们有一篇文章专门介绍了Java内存模型-清晰剖析点击可进入在这里,我们再来简单回顾一下Java内存模型的三个组成部分。Java 内存模型1 个主内存、n 个线程、n 个工作内存(与线程一一对应),数据就在它们三者之间来回倒腾。那么怎么倒腾呢?原创 2024-09-02 06:00:00 · 818 阅读 · 21 评论 -
深入探索 Java 中的动态代理:综合指南
动态代理是 Java 编程语言中的一项高级功能,它使开发人员能够在运行时动态创建代理类。此功能引入了一系列可能性,从实现自定义类加载器到构建灵活高效的框架。在对 Java 中的动态代理的广泛探索中,我们将深入研究其复杂性,研究其内部工作原理、各种用例、潜在陷阱、字节码操作等高级主题,甚至其实际应用。2. 动态代理原理动态代理的核心在于运行时创建代理类和对象。Java 的 java.lang.reflect 包对于动态代理的实现至关重要。该过程首先定义一个表示要拦截的方法的接口。原创 2024-09-02 08:00:00 · 844 阅读 · 5 评论 -
Java 网络属性(含HTTP Client客户端等): 详细整理
Java 网络 API 提供用于网络功能的类,包括寻址、使用 URL 和 URI 的类、用于连接服务器的套接字类、网络安全功能等。2. 网络系统属性设置您可以通过以下三种方式之一设置以下网络系统属性:使用-Djava 命令的选项使用System.setProperty(String, String)方法在文件中指定它们。请注意,您只能在此文件中指定与代理相关的属性。2.1 HTTP Client客户端属性介绍以下某些属性受预定义的最小值和最大值约束,这些值会覆盖任何用户指定的值。原创 2024-08-31 18:40:07 · 912 阅读 · 5 评论 -
【历代文学】Druid连接池实战:搞懂6个参数,就能用好它
Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。Druid是一个开源项目,源码托管在github上,源代码仓库地址是:阿里巴巴的Druid是一个JDBC组件,它包含三部分:DruidDriver代理、DruidDataSource数据库连接池和SQLParser。Druid是阿里巴巴的开源项目,该项目主要是为了监控数据库连接池的性能指标,提供可视化的操作界面。Druid连接池的优点:可以监控数据库池的状态,包括池的状态及每个活动连接的详细状态。原创 2024-08-31 06:00:00 · 2121 阅读 · 7 评论 -
阿里Druid数据源:DruidDataSource配置属性全解
Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。Druid是一个开源项目,源码托管在github上,源代码仓库地址是:同时每次Druid发布正式版本和快照的时候,都会把源码打包,你可以从上面的下载地址中找到相关版本的源码DruidDataSource配置兼容DBCP,但个别配置的语意有所区别。以下配置说明基于druid 1.2.22 整理,请升级至1.2.22或更高版本,并参考以下属性进行相关配置。原创 2024-08-30 13:35:32 · 4174 阅读 · 9 评论 -
选择排序 – 算法、源代码、时间复杂度
选择排序是一种简单排序算法,它的基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放到序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,放到已排序序列的末尾,以此类推,直到全部待排序的数据元素排完。描述选择排序的工作原理。包括选择排序的 Java 源代码。展示如何推导其时间复杂度(无需复杂的数学运算)。并检查 Java 实现的性能是否与预期的运行时行为相匹配。2. 示例:对扑克牌进行排序将扑克牌分拣到手中是插入排序的经典案例。选择排序。原创 2024-09-01 06:00:00 · 792 阅读 · 17 评论 -
Java 中的各种排序:详细教程
本文通过许多代码示例逐步解释如何对 Java 中原始数据类型(int,long,double等)和任何类的对象进行排序。如何对 Java 中原始数据类型的数组进行排序?如何对 Java 中的对象数组和列表进行排序?如何在 Java 中并行排序?JDK 内部使用哪些排序算法?2. Java 中可以对什么进行排序?原始数据类型的数组(int[]、long[]、double[]等)。实现Comparable接口的对象数组和列表。原创 2024-08-30 06:00:00 · 2391 阅读 · 7 评论