<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>编程技术人生</title><link>http://lidehe.cn/</link><description>技术文章分享与学习平台</description><item><title>SSL与TLS的区别以及介绍</title><link>http://lidehe.cn/post/151.html</link><description>&lt;p style=&quot;margin: 10px auto; text-wrap: wrap; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;SSL：（Secure Socket Layer，安全套接字层）&lt;/strong&gt;&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;，位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。&lt;/span&gt;SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性，以实现客户端和服务器之间的安全通讯。该协议由两层组成：SSL记录协议和SSL握手协议。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; text-wrap: wrap; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;TLS：（Transport Layer Security，传输层安全协议）&lt;/strong&gt;&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;，用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成：&lt;/span&gt;TLS记录协议和TLS握手协议。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; text-wrap: wrap; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;　　SSL是Netscape开发的专门用于保护Web通讯的，目前版本为3.0.最新版本的TLS 1.0是IETE（工程任务组）指定的一种新的协议，它建立在SSL 3.0协议规范之上，是SSL 3.0的后续版本。两者差别极小，可以理解为SSL 3.1，它是写入了RFC的。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img src=&quot;http://lidehe.cn/zb_users/upload/2024/03/202403291711691895822783.png&quot; alt=&quot;image.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;img src=&quot;http://lidehe.cn/zb_users/upload/2024/03/202403291711691907458189.png&quot; alt=&quot;image.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;　　SSL（Secure Socket Layer）&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;　　为&lt;/span&gt;Netscape所研发，用以保障在Internet上数据传输之安全，利用数据加密（Encryption）技术，可确保数据在网络上之传输过程中不会被截取。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;　　当前版本为&lt;/span&gt;3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　SSL协议位于TCP/IP协议与各种应用层协议之间，为数据通讯提供安全支持。SSL协议可分为两层：SSL记录协议（SSL Record Protocol）：它建立在可靠的传输协议（如TCP）之上，为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议（SSL Handshake Protocol）：它建立在SSL记录协议之上，用于在实际的数据传输开始前，通讯双方进行身份认证、协商加密算法、交换加密密钥等。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;　　SSL协议提供的服务主要有：&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　1）认证用户和服务器，确保数据发送到正确的客户机和服务器；&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　2）加密数据以防止数据中途被窃取；&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　3）维护数据的完整性，确保数据在传输过程中不被改变。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;　　SSL协议的工作流程：&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　服务器认证阶段：&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　1）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;客户端向服务器发送一个开始信息&lt;/span&gt;“Hello”以便开始一个新的会话连接；&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　2）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;服务器根据客户的信息确定是否需要生成新的主密钥，如需要则服务器在响应客户的&lt;/span&gt;“Hello”信息时将包含生成主密钥所需的信息；&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　3）客服根据收到的服务器响应信息，产生一个主密钥，并用服务器的公开密钥加密后传给服务器；&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　4）服务器恢复该主密钥，并返回给客户一个用主密钥认证的信息，以此让客户认证服务器。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　用户认证阶段：在此之前，服务器已经通过了客户认证，这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户，客户则返回（数字）签名后的提问和其公开密钥，从而向服务器提供认证。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　TLS（Transport Layer Security Protocol）：安全传输层协议&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;　　安全传输层协议（&lt;/span&gt;TLS）用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两成组成：TLS记录协议（TLS Record）和TLS握手协议（TLS Handshake）。较低的层为TLS记录协议，位于某个可靠的传输协议（例如TCP）上面。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　TLS记录协议提供的连接安全性具有两个基本特性：&lt;/p&gt;&lt;ul style=&quot;margin-left: 30px; padding: 0px; word-break: break-word; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;私有——对称加密用以数据加密（DES、RC4等）。对称加密所产生的密钥对每个连接都是唯一的，且此密钥基于另一个协议（如握手协议）协商。记录协议也可以不加密使用。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;可靠——信息传输包括使用密钥的MAC进行信息完整性检查。安全哈希功能（SHA、MD5等）用于MAC计算。记录协议在没有MAC的情况下也能操作，但一般只能用于这种模式，即有另一个协议正在使用记录协议传输协商安全参数。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　TLS记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间互相认证，协商加密算法和加密密钥。TLS握手协议提供的连接安全具有三个基本属性：&lt;/p&gt;&lt;ul style=&quot;margin-left: 30px; padding: 0px; word-break: break-word; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;可以使用非对称的，或公共密钥的密码术来认证对等方的身份。该认证是可选的，但至少需要一个结点方。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;共享解密密钥的协商是安全的。对偷窃者来说协商加密是难以获得的。此外经过认证过的连接不能获得加密，即使是进入连接中间的攻击者也不能。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;协商是可靠的。没有经过通信方成员的检测，任何攻击者都不能修改通信协商。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　TLS的最大优势就在于：TLS是独立于应用协议。高层协议可以透明地分布在TLS协议上面。然而，TLS标准并没有规定应用程序如何在TLS上增加安全性；它如何启动TLS握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　协议结构&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　TLS协议包括两个协议组——TLS记录协议和TLS握手协议。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　TLS和SSL的关系：并列关系&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;　　最新版本的&lt;/span&gt;TLS（Transport Layer Security，传输层安全协议）是IETF（Internet Engineering Task Force，Internet工程任务组）制定的一种新的协议，它建立在SSL 3.0协议规范之上，是SSL 3.0的后续版本。在TLS与SSL 3.0之间存在着显著的差别，主要是它们所支持的加密算法不同，所以TLS与SSL 3.0不能互操作。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　1.TLS与SSL的差异&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　1）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;版本号：&lt;/span&gt;TLS记录格式与SSL记录格式相同，但版本号的值不同，TLS的版本1.0使用的版本号为SSLv3.1。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　2）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;报文鉴别码：&lt;/span&gt;SSLv3.0和TLS的MAC算法及MAC计算的范围不同。TLS使用RFC-2104定义的HMAC算法。SSLv3.0使用了相似的算法，两者差别在于SSLv3.0中，填充字节与密钥之间采用的是连接运算，而HMAC算法采用的异或运算。但是两者的安全程度是相同的。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　3）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;伪随机函数：&lt;/span&gt;TLS使用了称为PRF的伪随机函数来将密钥扩展成数据块，是更安全的方式。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　4）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;报警代码：&lt;/span&gt;TLS支持几乎所有的SSLv3.0报警代码，而且TLS还补充定义了很多报警代码，如解密失败（decryption_failed）、记录溢出（record_overflow）、未知CA（unknown_ca）、拒绝访问（access_denied）等。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　5）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;密文族和客户证书：&lt;/span&gt;SSLv3.0和TLS存在少量差别，即TLS不支持Fortezza密钥交换、加密算法和客户证书。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　6）certificate_verify和finished消息：SSLv3.0和TLS在用certificate_verify和finished消息计算MD5和SHA-1散列码时，计算的输入有少许差别，但安全性相当。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　7）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;加密计算：&lt;/span&gt;TLS和SSLv3.0在计算主密值（master secret）时采用的方式不同。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　8）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;填充：用户数据加密之前需要增加的填充字节。在&lt;/span&gt;SSL中，填充后的数据长度哟啊达到密文快长度的最小整数倍。而在TLS中，填充后的数据长度可以是密文块长度的任意整数倍（但填充的最大长度为255字节），这种方式可以防止基于对报文长度进行分析的攻击。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　2.TLS的主要增强内容&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　TLS的主要目标是使SSL更安全，并使协议的规范更精确和完善。TLS在SSL v3.0的基础上，提供了以下增加内容：&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　1）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;更安全的&lt;/span&gt;MAC算法&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　2）更严密的警报&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　3）“灰色区域”规范的更明确的定义&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　3.TLS对于安全性的改进&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　1）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;对于消息认证使用密钥散列法：&lt;/span&gt;TLS使用“消息认证代码的密钥散列法”（HMAC），当记录在开放的网络（如因特网）上传送时，该代码确保记录不会被变更。SSLv3.0还提供键控消息认证，但HMAC比SSLv3.0使用（消息认证代码）MAC功能更安全。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　2）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;增强的伪随机功能（&lt;/span&gt;PRF）：PRF生成密钥数据。在TLS中，HMAC定义PRF。PRF使用两种散列算法保证其安全性。如果任一算法暴露了，只要第二种算法未暴露，则数据仍然是安全的。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　3）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;改进的已完成消息验证：&lt;/span&gt;TLS和SSLv3.0都对两个端点提供已完成的消息，该消息认证交换的消息没有被变更。然而，TLS将此已完成消息基于PRF和HMAC值之上，这也比SSLv3.0更安全。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　4）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;一致证书处理：与&lt;/span&gt;SSLv3.0不同，TLS试图指定必须在TLS之间实现交换的证书类型。&lt;/p&gt;&lt;p style=&quot;margin: 10px auto; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;　　5）&lt;span style=&quot;margin: 0px; padding: 0px; font-family: 宋体;&quot;&gt;特定警报消息：&lt;/span&gt;TLS提供更多的特定和附加警报，以指示任一会话端点检测到的问题。TLS还对何时应该发送某些警报进行记录。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Fri, 29 Mar 2024 13:54:45 +0800</pubDate></item><item><title>SpringBoot 实现后端的接口版本支持</title><link>http://lidehe.cn/post/150.html</link><description>&lt;p style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;引言&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;作为一个主职的后端开发者，在平时的工作中，最讨厌的做的事情可以说是参数校验和接口的版本支持了。对于客户端的同学来说，业务的历史包袱会小很多，当出现不兼容的业务变动时，直接开发新的就好；然而后端就没有这么简单了，历史的接口得支持，新的业务也得支持，吭哧吭哧的新加一个服务接口，url&amp;nbsp;又不能和之前的相同，怎么办？只能在某个地方加一个类似&lt;/span&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;v1&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;v2&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;...&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;那么有没有一种不改变&amp;nbsp;url，通过其他的方式来支持版本管理的方式呢？&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;主要用到的知识点为:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul yne-block-type=&quot;list&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;RequestCondition&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;RequestMappingHandlerMapping&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.75;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family: Times New Roman;font-size: 18px;color: #FFFFFF;background-color: #EF7060;&quot;&gt;I.&amp;nbsp;应用场景&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;我们希望同一个业务始终用相同的&amp;nbsp;url，即便不同的版本之间业务完全不兼容，通过请求参数中的版本选择最合适的后端接口来响应这个请求&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.75;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family: Times New Roman;font-size: 20px;background-color: #FFFFFF;&quot;&gt;1.&amp;nbsp;约定&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;需要实现上面的&amp;nbsp;case，首先有两个约定&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul yne-block-type=&quot;list&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;每个请求中必须携带版本参数&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;每个接口都定义有一个支持的版本&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.75;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family: Times New Roman;font-size: 20px;background-color: #FFFFFF;&quot;&gt;2.&amp;nbsp;规则&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;明确上面两点前提之后，就是基本规则了&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;版本定义&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;根据常见的三段式版本设计，版本格式定义如下&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.75;&quot;&gt;&lt;span style=&quot;font-size: 12px;color: #383A42;background-color: #FAFAFA;&quot;&gt;x.x.x&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul yne-block-type=&quot;list&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;其中第一个&amp;nbsp;x：对应的是大版本，一般来说只有较大的改动升级，才会改变&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;其中第二个&amp;nbsp;x：表示正常的业务迭代版本号，每发布一个常规的&amp;nbsp;app&amp;nbsp;升级，这个数值+1&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;最后一个&amp;nbsp;x：主要针对&amp;nbsp;bugfix，比如发布了一个&amp;nbsp;app，结果发生了异常，需要一个紧急修复，需要再发布一个版本，这个时候可以将这个数值+1&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;接口选择&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;通常的&amp;nbsp;web&amp;nbsp;请求都是通过&amp;nbsp;url&amp;nbsp;匹配规则来选择对应响应接口，但是在我们这里，一个&amp;nbsp;url，可能会有多个不同的接口，该怎么选择呢？&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul yne-block-type=&quot;list&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;首先从请求中，获取版本参数&amp;nbsp;version&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;从所有相同的&amp;nbsp;url&amp;nbsp;接口中，根据接口上定义的版本，找到所有小于等于&amp;nbsp;version&amp;nbsp;的接口&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;在上面满足条件的接口中，选择版本最大的接口来响应请求&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.75;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family: Times New Roman;font-size: 18px;color: #FFFFFF;background-color: #EF7060;&quot;&gt;II.&amp;nbsp;应用实现&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;明确上面的应用场景之后，开始设计与实现&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.75;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family: Times New Roman;font-size: 20px;background-color: #FFFFFF;&quot;&gt;1.&amp;nbsp;接口定义&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;首先我们需要一个版本定义的注解，用于标记&amp;nbsp;web&amp;nbsp;服务接口的版本，默认版本号为&amp;nbsp;1.0.0&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;prism-highlight prism-language-java&quot;&gt;@Target({ElementType.TYPE,&amp;nbsp;ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public&amp;nbsp;@interface&amp;nbsp;Api&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;版本
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;value()&amp;nbsp;default&amp;nbsp;&amp;quot;1.0.0&amp;quot;;
}&lt;/pre&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;其次需要一个版本对应的实体类，注意下面的实现中，默认版本为&lt;/span&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;1.0.0&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;，并实现了&lt;/span&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;Comparable&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;接口，支持版本之间的比较&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;prism-highlight prism-language-java&quot;&gt;@Data
public&amp;nbsp;class&amp;nbsp;ApiItem&amp;nbsp;implements&amp;nbsp;Comparable&amp;lt;ApiItem&amp;gt;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;int&amp;nbsp;high&amp;nbsp;=&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;int&amp;nbsp;mid&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;int&amp;nbsp;low&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;ApiItem()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;int&amp;nbsp;compareTo(ApiItem&amp;nbsp;right)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(this.getHigh()&amp;nbsp;&amp;gt;&amp;nbsp;right.getHigh())&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;if&amp;nbsp;(this.getHigh()&amp;nbsp;&amp;lt;&amp;nbsp;right.getHigh())&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;-1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(this.getMid()&amp;nbsp;&amp;gt;&amp;nbsp;right.getMid())&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;if&amp;nbsp;(this.getMid()&amp;nbsp;&amp;lt;&amp;nbsp;right.getMid())&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;-1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(this.getLow()&amp;nbsp;&amp;gt;&amp;nbsp;right.getLow())&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;if&amp;nbsp;(this.getLow()&amp;nbsp;&amp;lt;&amp;nbsp;right.getLow())&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;-1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;需要一个将&amp;nbsp;string&amp;nbsp;格式的版本转换为&amp;nbsp;ApiItem&amp;nbsp;的转换类，并且支持了默认版本为&lt;/span&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;1.0.0&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;的设定&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;prism-highlight prism-language-java&quot;&gt;public&amp;nbsp;class&amp;nbsp;ApiConverter&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;ApiItem&amp;nbsp;convert(String&amp;nbsp;api)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ApiItem&amp;nbsp;apiItem&amp;nbsp;=&amp;nbsp;new&amp;nbsp;ApiItem();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(StringUtils.isBlank(api))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;apiItem;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String[]&amp;nbsp;cells&amp;nbsp;=&amp;nbsp;StringUtils.split(api,&amp;nbsp;&amp;quot;.&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apiItem.setHigh(Integer.parseInt(cells[0]));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(cells.length&amp;nbsp;&amp;gt;&amp;nbsp;1)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apiItem.setMid(Integer.parseInt(cells[1]));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(cells.length&amp;nbsp;&amp;gt;&amp;nbsp;2)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apiItem.setLow(Integer.parseInt(cells[2]));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;apiItem;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.75;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family: Times New Roman;font-size: 20px;background-color: #FFFFFF;&quot;&gt;2.&amp;nbsp;HandlerMapping&amp;nbsp;接口选择&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;需要一个&amp;nbsp;url，支持多个请求接口，可以考虑通过&lt;/span&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;RequestCondition&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;来实现，下面是具体的实现类&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;prism-highlight prism-language-java&quot;&gt;public&amp;nbsp;class&amp;nbsp;ApiCondition&amp;nbsp;implements&amp;nbsp;RequestCondition&amp;lt;ApiCondition&amp;gt;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;ApiItem&amp;nbsp;version;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;ApiCondition(ApiItem&amp;nbsp;version)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.version&amp;nbsp;=&amp;nbsp;version;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;ApiCondition&amp;nbsp;combine(ApiCondition&amp;nbsp;other)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;选择版本最大的接口
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;version.compareTo(other.version)&amp;nbsp;&amp;gt;=&amp;nbsp;0&amp;nbsp;?&amp;nbsp;new&amp;nbsp;ApiCondition(version)&amp;nbsp;:&amp;nbsp;new&amp;nbsp;ApiCondition(other.version);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;ApiCondition&amp;nbsp;getMatchingCondition(HttpServletRequest&amp;nbsp;request)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;version&amp;nbsp;=&amp;nbsp;request.getHeader(&amp;quot;x-api&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ApiItem&amp;nbsp;item&amp;nbsp;=&amp;nbsp;ApiConverter.convert(version);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;获取所有小于等于版本的接口
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(item.compareTo(this.version)&amp;nbsp;&amp;gt;=&amp;nbsp;0)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;this;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;null;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;int&amp;nbsp;compareTo(ApiCondition&amp;nbsp;other,&amp;nbsp;HttpServletRequest&amp;nbsp;request)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;获取最大版本对应的接口
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;other.version.compareTo(this.version);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;虽然上面的实现比较简单，但是有必要注意一下两个逻辑&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul yne-block-type=&quot;list&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;getMatchingCondition&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;color: #010101;background-color: #FFFFFF;&quot;&gt;方法中，控制了只有版本小于等于请求参数中的版本的&amp;nbsp;ApiCondition&amp;nbsp;才满足规则&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;compareTo&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;color: #010101;background-color: #FFFFFF;&quot;&gt;&amp;nbsp;指定了当有多个&lt;/span&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;ApiCoondition&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;color: #010101;background-color: #FFFFFF;&quot;&gt;满足这个请求时，选择最大的版本&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;自定义&lt;/span&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;RequestMappingHandlerMapping&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;实现类&lt;/span&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;ApiHandlerMapping&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;prism-highlight prism-language-java&quot;&gt;public&amp;nbsp;class&amp;nbsp;ApiHandlerMapping&amp;nbsp;extends&amp;nbsp;RequestMappingHandlerMapping&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&amp;nbsp;RequestCondition&amp;nbsp;getCustomTypeCondition(Class&amp;nbsp;handlerType)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;buildFrom(AnnotationUtils.findAnnotation(handlerType,&amp;nbsp;Api.class));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&amp;nbsp;RequestCondition&amp;nbsp;getCustomMethodCondition(Method&amp;nbsp;method)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;buildFrom(AnnotationUtils.findAnnotation(method,&amp;nbsp;Api.class));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;ApiCondition&amp;nbsp;buildFrom(Api&amp;nbsp;platform)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;platform&amp;nbsp;==&amp;nbsp;null&amp;nbsp;?&amp;nbsp;new&amp;nbsp;ApiCondition(new&amp;nbsp;ApiItem())&amp;nbsp;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new&amp;nbsp;ApiCondition(ApiConverter.convert(platform.value()));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;注册&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;prism-highlight prism-language-java&quot;&gt;@Configuration
public&amp;nbsp;class&amp;nbsp;ApiAutoConfiguration&amp;nbsp;implements&amp;nbsp;WebMvcRegistrations&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;RequestMappingHandlerMapping&amp;nbsp;getRequestMappingHandlerMapping()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;new&amp;nbsp;ApiHandlerMapping();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;基于此，一个实现接口版本管理的微框架已经完成；接下来进入测试环节&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.75;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family: Times New Roman;font-size: 18px;color: #FFFFFF;background-color: #EF7060;&quot;&gt;III.&amp;nbsp;测试&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.75;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family: Times New Roman;font-size: 20px;background-color: #FFFFFF;&quot;&gt;case1.&amp;nbsp;方法上添加版本&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;设计三个接口，一个不加上注解，另外两个添加不同版本的注解&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;prism-highlight prism-language-java&quot;&gt;@RestController
@RequestMapping(path&amp;nbsp;=&amp;nbsp;&amp;quot;v1&amp;quot;)
public&amp;nbsp;class&amp;nbsp;V1Rest&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GetMapping(path&amp;nbsp;=&amp;nbsp;&amp;quot;show&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;String&amp;nbsp;show1()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&amp;quot;v1/show&amp;nbsp;1.0.0&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Api(&amp;quot;1.1.2&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GetMapping(path&amp;nbsp;=&amp;nbsp;&amp;quot;show&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;String&amp;nbsp;show2()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&amp;quot;v1/show&amp;nbsp;1.1.2&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Api(&amp;quot;1.1.0&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GetMapping(path&amp;nbsp;=&amp;nbsp;&amp;quot;show&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;String&amp;nbsp;show3()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&amp;quot;v1/show&amp;nbsp;1.1.0&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;在发起请求时，分别不带上版本，带指定版本，来测试对应的响应&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&quot;http://lidehe.cn/zb_users/upload/2024/03/202403191710842656238742.png&quot; alt=&quot;image.png&quot;/&gt;&lt;/p&gt;&lt;div&gt;&lt;ul yne-block-type=&quot;list&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;color: #010101;background-color: #FFFFFF;&quot;&gt;从上面的截图可以看出，请求头中没有版本时，默认给一个&lt;/span&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;1.0.0&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;color: #010101;background-color: #FFFFFF;&quot;&gt;的版本&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;响应的是小于请求版本的接口中，版本最大的哪一个&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.75;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-family: Times New Roman;font-size: 20px;background-color: #FFFFFF;&quot;&gt;case2.&amp;nbsp;类版本+方法版本&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;每个方法上添加版本有点蛋疼，在上面的注解定义中，就支持了类上注解，从实现上也可以看出，当方法和类上都有注解时，选择最大的版本&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;prism-highlight prism-language-java&quot;&gt;@Api(&amp;quot;2.0.0&amp;quot;)
@RestController
@RequestMapping(path&amp;nbsp;=&amp;nbsp;&amp;quot;v2&amp;quot;)
public&amp;nbsp;class&amp;nbsp;V2Rest&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Api(&amp;quot;1.1.0&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GetMapping(path&amp;nbsp;=&amp;nbsp;&amp;quot;show&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;String&amp;nbsp;show0()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&amp;quot;v2/show0&amp;nbsp;1.1.0&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GetMapping(path&amp;nbsp;=&amp;nbsp;&amp;quot;show&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;String&amp;nbsp;show1()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&amp;quot;v2/show1&amp;nbsp;2.0.0&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Api(&amp;quot;2.1.1&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GetMapping(path&amp;nbsp;=&amp;nbsp;&amp;quot;show&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;String&amp;nbsp;show2()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&amp;quot;v2/show2&amp;nbsp;2.1.1&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Api(&amp;quot;2.2.0&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GetMapping(path&amp;nbsp;=&amp;nbsp;&amp;quot;show&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;String&amp;nbsp;show3()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&amp;quot;v2/show3&amp;nbsp;2.2.0&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.625;&quot;&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;根据我们的实现规则，show0&amp;nbsp;和&amp;nbsp;show1&amp;nbsp;都会相应&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #EF7060;background-color: #1B1F23;&quot;&gt;&amp;lt;2.1.1&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;font-size: 16px;background-color: #FFFFFF;&quot;&gt;&amp;nbsp;的版本请求，这个时候会出现冲突；&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&quot;http://lidehe.cn/zb_users/upload/2024/03/202403191710842703817916.png&quot; alt=&quot;image.png&quot;/&gt;&lt;/p&gt;&lt;div&gt;&lt;ul yne-block-type=&quot;list&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;从上面的截图中，可以看出来版本小于&amp;nbsp;2.0.0&amp;nbsp;的请求，报的是&amp;nbsp;404&amp;nbsp;错误&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;background-color: #FFFFFF;&quot;&gt;请求版本小于&amp;nbsp;2.1.1&amp;nbsp;的请求，报的是冲突异常&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 19 Mar 2024 17:59:27 +0800</pubDate></item><item><title>IDEA插件-热部署JRebel</title><link>http://lidehe.cn/post/148.html</link><description>&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.28571;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 28px;color: #4F4F4F;&quot;&gt;一、摘要&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-size: 16px;color: #4D4D4D;&quot;&gt;springboot项目开发过程中通常修改了某分部代码需要重启服务才能生效。通过JRebel插件可以实现热部署，避免了频繁重启服务。&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-size: 16px;color: #4D4D4D;&quot;&gt;JRebel是一套JavaEE开发工具。&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-size: 16px;color: #4D4D4D;&quot;&gt;Jrebel 可快速实现热部署，节省了大量重启时间，提高了个人开发效率。&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.28571;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 28px;color: #4F4F4F;&quot;&gt;二、安装&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.33333;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 16px;color: #4F4F4F;&quot;&gt;1、安装插件&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-size: 18px;color: #4D4D4D;&quot;&gt;插件中心搜索Rebel插件，点击Install&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&lt;img src=&quot;http://lidehe.cn/zb_users/upload/2024/03/202403191710841942894566.png&quot; alt=&quot;image.png&quot;/&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.33333;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 24px;color: #4F4F4F;&quot;&gt;2、激活&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 16px;color: #4D4D4D;&quot;&gt;生成guid&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-size: 18px;color: #4D4D4D;&quot;&gt;访问地址：&lt;/span&gt;&lt;a href=&quot;https://www.guidgen.com/&quot; style=&quot;text-decoration-line: none;&quot;&gt;&lt;span style=&quot;font-size: 18px;color: #6795B5;&quot;&gt;https://www.guidgen.com/&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 18px;color: #4D4D4D;&quot;&gt;生成guid&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 16px;color: #4D4D4D;&quot;&gt;激活&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-size: 18px;color: #4D4D4D;&quot;&gt;点击JRebel Activation打开激活页面&lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://lidehe.cn/zb_users/upload/2024/03/202403191710841967844594.png&quot; alt=&quot;image.png&quot;/&gt;&lt;p style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-size: 18px;color: #4D4D4D;&quot;&gt;输入服务地址：&lt;a href=&quot;https://jrebel.qekang.com/{guid}和邮箱,勾选同意条款点击激活即可&quot; _src=&quot;https://jrebel.qekang.com/{guid}和邮箱,勾选同意条款点击激活即可&quot;&gt;https://jrebel.qekang.com/{guid}和邮箱,勾选同意条款点击激活即可&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-size: 18px;color: #4D4D4D;&quot;&gt;&lt;img src=&quot;http://lidehe.cn/zb_users/upload/2024/03/202403191710841991793992.png&quot; alt=&quot;image.png&quot; style=&quot;text-wrap: wrap;&quot;/&gt; &lt;/span&gt;&lt;/p&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 24px;color: #4F4F4F;&quot;&gt;3、设置 &lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-size: 18px;color: #4D4D4D;&quot;&gt;（&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-size: 18px;color: #DF402A;&quot;&gt;批注：个人觉得没必要设置自动编译，电脑配置卡会反应迟钝&lt;/span&gt;&lt;span style=&quot;font-weight: bold;font-size: 18px;color: #4D4D4D;&quot;&gt;）&lt;/span&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 18px;color: #4D4D4D;&quot;&gt;勾选自动编译 &lt;/span&gt;&lt;/div&gt;&lt;img src=&quot;http://lidehe.cn/zb_users/upload/2024/03/202403191710842019817212.png&quot; alt=&quot;image.png&quot; style=&quot;color: rgb(77, 77, 77); font-size: 18px; white-space: pre-wrap;&quot;/&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 18px;color: #4D4D4D;&quot;&gt;设置运行时编译&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 18px;color: #4D4D4D;&quot;&gt;Ctrl+Shift+Alt+/&lt;/span&gt;&lt;span style=&quot;font-size: 18px;color: #4D4D4D;&quot;&gt;&amp;nbsp;—&amp;gt; Registry&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;img src=&quot;http://lidehe.cn/zb_users/upload/2024/03/202403191710842049788992.png&quot; alt=&quot;image.png&quot;/&gt;&lt;/p&gt;&lt;div yne-bulb-block=&quot;hr&quot; style=&quot;white-space: pre-wrap; line-height: 1.75;&quot;&gt;&lt;hr/&gt;&lt;/div&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.28571;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 28px;color: #4F4F4F;&quot;&gt;三、使用&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 18px;color: #4D4D4D;&quot;&gt;通过JRebel启动服务&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-weight: bold;font-size: 18px;color: #4D4D4D;&quot;&gt;&lt;img src=&quot;http://lidehe.cn/zb_users/upload/2024/03/202403191710842084681463.png&quot; alt=&quot;image.png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;div yne-bulb-block=&quot;paragraph&quot; style=&quot;white-space: pre-wrap; line-height: 1.44444;&quot;&gt;&lt;span style=&quot;font-size: 18px;color: #4D4D4D;&quot;&gt;修改代码后可以通过快捷键&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 18px;color: #4D4D4D;font-weight: bold;&quot;&gt;Ctrl + Shift + F9&lt;/span&gt;&lt;span style=&quot;font-size: 18px;color: #4D4D4D;&quot;&gt;&amp;nbsp;或者用鼠标点锤子来 触发热部署，修改的代码马上生效，不需要重启项目。&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;&lt;img src=&quot;http://lidehe.cn/zb_users/upload/2024/03/202403191710842097307616.png&quot; alt=&quot;image.png&quot;/&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 19 Mar 2024 17:49:25 +0800</pubDate></item><item><title>探索数据领域的秘密：数组的访问、操作与遍历</title><link>http://lidehe.cn/post/146.html</link><description>&lt;div id=&quot;article-root&quot; itemprop=&quot;articleBody&quot; class=&quot;article-viewer markdown-body result&quot; data-v-2c6459d4=&quot;&quot;&gt;&lt;style&gt;.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin:30px 0 10px;color:#cca152;position:relative;padding-left:50px;border-bottom:2px solid rgba(209,163,78,.6);padding-bottom:0}.markdown-body h1{font-size:30px}.markdown-body h1:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:80%;bottom:-10px;left:-2px}.markdown-body h2{font-size:24px}.markdown-body h2:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:70%;bottom:-15px;left:-1px}.markdown-body h3{font-size:18px}.markdown-body h3:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:60%;bottom:-19px;left:-2px}.markdown-body h4{font-size:16px;padding-left:0;border-bottom:1px solid rgba(209,163,78,.6)}.markdown-body h5{font-size:15px;padding-left:0}.markdown-body em{color:#cca152}.markdown-body del{text-decoration-color:#cca152;text-decoration-thickness:2px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:80%;margin:6px auto;box-shadow:0 6px 15px #8e8e8e;display:block;margin:20px auto!important;object-fit:contain;border-radius:8px}.markdown-body hr{border:none;border-top:2px solid #e0c9a1;margin-top:32px 0}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background:#f6efde;color:#b69454;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Mono,Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75;background:#fef6e1;border-radius:4px;box-shadow:0 0 8px hsla(0,0%,47%,.45)}.markdown-body pre:before{content:&quot;&quot;;display:block;height:30px;width:100%;margin-bottom:-7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAMAAABaWb9VAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAADsQAAA7EAZUrDhsAAACHUExURUdwTMxCKdc8NvdYT/9hVyLJPABBAGubKNiIOv+/K+ytJBakH9aZG+5QR5VZDOBDPhmtJ8+VGuGjH/CwJR26MR6+NBq0LPW1KBmwKetNRfJUTONHP92fHuSmIeFEPhu3LR29M/BTS+mqIuqsI5qdHyLKPP++Kv9gVf9lW//KLSXXQCTQP//FLMVm5KQAAAAldFJOUwAlPPz7+woBBPu8Mzu+FlRRKmvnweeG+Wqg6mVNXmuc1OCbmjZJWF/9AAABKklEQVQoz3WS6XaCMBCFRzAM++KGsqhtDwES3//5OtmA2uP9A9zwzRoAgBC0QgQrdA68OZsDr229YGHoIEj7Pl0ZOgjKa5lYJ4Rd1vijn3nuD4Qurjmv48o6RFyfbGDnS6DeEXZfk5ZfuBhdPb9I87ECNMh1EFJKIU6agWzaa01NbmLkxznSmmObJBkkUxrERf3i+ftRiZi7ShPCYY64UhTx1AR5CDYoMXkOKEY7GmTcTzeD/FiER68DfSLgSRqEIBoB3P8h3x8RZhBXGJGusJdD6rfCBl0YqvZNkrV9zej2cWlfJWG6fRpyM41qYH+GTPPi2yFLQYC0Qybm5o96lW77kMbcrBKtgeWTsthVamNXFF4I6x0DTPuugsVRFyYpyxzWqNvHJwed8ws7QyP1UwjNjwAAAABJRU5ErkJggg==) 10px 10px no-repeat;background-size:40px}.markdown-body pre&gt;code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#fef6e1}.markdown-body a{text-decoration:none;color:#d8ac5a;border-bottom:1px solid #d8ac5a}.markdown-body a:active,.markdown-body a:hover{color:#93753f;border-color:#93753f}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f4e8c7;border-collapse:collapse}.markdown-body thead{background:rgba(255,227,176,.6588235294);text-align:left;display:table-header-group;border-bottom:1px solid rgba(255,227,176,.6588235294)}.markdown-body tbody{background:rgba(255,247,229,.3882352941)}.markdown-body td,.markdown-body th{padding:7px;line-height:24px;min-width:100px}.markdown-body blockquote{color:#bd954f;padding:1px 23px;margin:22px 0;border-left:4px solid #dcb267;background-color:#fff7e5}.markdown-body blockquote:after{display:block;content:&quot;&quot;}.markdown-body blockquote&gt;p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol .task-list-item,.markdown-body ul .task-list-item{list-style:none}.markdown-body ol li{padding-left:6px}.markdown-body::marker{color:#dcb267}.markdown-body .contains-task-list{padding-left:0}.markdown-body .contains-task-list .task-list-item{list-style:none;position:relative}.markdown-body .contains-task-list .task-list-item input[type=checkbox]{position:relative;top:2px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:before{content:&quot;&quot;;display:inline-block;height:12px;width:12px;position:absolute;left:-2px;top:-2px;border:2px solid #cda152;border-radius:5px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:checked{position:relative;top:2px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:checked:before{border:none;content:&quot;&quot;;display:inline-block;height:17px;width:17px;position:absolute;left:-2px;top:-2px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAAAXNSR0IArs4c6QAAAYhJREFUOBFjYACC0/MDGsDEiyvr/zOCeUwMJxn/A8HZRUEMYBFGJsZ6kFoQYALiAyAGCgDpA+sFijKeWRj4H1kWpIWBW1SDQcm+BCzOAiK/vr7BcO/gDbAAI4hE1waWgRBnmWCGIwkyKFjnwow0BhsJk9QLncvw5dV1oPE9MCEGmBWrgCKhcFEowyR+PSNYwemFAZ4M/xjMkRWYJm5oAPFB/joDpI1BHHQANgGPDxj+//vfCA4IdJ3GcevgQnAFhlHLwYIgSVA0wABcwY3tFQzokiBFGIEP0wmigW5wZAK5FFkQib0a6NUDcEmgb7AGFpIGZOZqoMFhIAFQknEAJpn9yLLEssFOBCp2IFaDkl0xg6C8FbJyB3gowUS5RdQYBORQYpVB1iwVHIIMwJh///AYTCmYRklNIBFmNi4GeYt0BhnjeIa3dw8wSBlEgDUhxw2yCRgGfHp2geHiqiSwUwUVrFAiFVkjjA1LrjgTHEwhFvosMCZM4NEIUoAtWWNoBGZ70/gN22HiAD2uhAzsYNBZAAAAAElFTkSuQmCC) 0 0 no-repeat;background-size:100%}@media (max-width:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}&lt;/style&gt;&lt;style data-highlight=&quot;&quot; data-highlight-key=&quot;androidstudio&quot;&gt;.markdown-body pre,.markdown-body pre&gt;code.hljs{color:#a9b7c6;background:#282b2e}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-symbol{color:#6897bb}.hljs-deletion,.hljs-keyword,.hljs-selector-tag{color:#cc7832}.hljs-link,.hljs-template-variable,.hljs-variable{color:#629755}.hljs-comment,.hljs-quote{color:grey}.hljs-meta{color:#bbb529}.hljs-addition,.hljs-attribute,.hljs-string{color:#6a8759}.hljs-section,.hljs-title,.hljs-type{color:#ffc66d}.hljs-name,.hljs-selector-class,.hljs-selector-id{color:#e8bf6a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}&lt;/style&gt;&lt;blockquote&gt;
&lt;p&gt;  &lt;a href=&quot;https://juejin.cn/column/7271287156571389991&quot; target=&quot;_blank&quot; title=&quot;https://juejin.cn/column/7271287156571389991&quot;&gt;《Java零基础教学》&lt;/a&gt;是一套深入浅出的 Java 编程入门教程。全套教程从Java基础语法开始，适合初学者快速入门，同时也从实例的角度进行了深入浅出的讲解，让初学者能够更好地理解Java编程思想和应用。&lt;/p&gt;
&lt;p&gt;  本教程内容包括数据类型与运算、流程控制、数组、函数、面向对象基础、字符串、集合、异常处理、IO 流及多线程等 Java 编程基础知识，并提供丰富的实例和练习，帮助读者巩固所学知识。本教程不仅适合初学者学习，也适合已经掌握一定 Java 基础的读者进行查漏补缺。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;  为了应某一读者的邀请，此次我特地梳理了一期以Java之数组系列，给新手小白或者初级者入门级零基础学习，加上完整且系统性的学习，希望能帮助到有需要的伙伴们，如下为这期学习内容的章节小结。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数组的基本概念&lt;/li&gt;
&lt;li&gt;数组的声明和初始化&lt;/li&gt;
&lt;li&gt;数组的访问和操作&lt;/li&gt;
&lt;li&gt;多维数组&lt;/li&gt;
&lt;li&gt;数组的排序和搜索&lt;/li&gt;
&lt;li&gt;动态数组和ArrayList&lt;/li&gt;
&lt;li&gt;数组的常见问题和解决方案&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  如上数组篇之小章节内容涵盖了Java数组的基本概念、声明、初始化、访问、操作、多维数组、排序、搜索、动态数组和常见问题解决方案等内容。通过系统学习这些章节，你将全面理解和掌握Java中数组的使用和相关技巧。你也可以根据需要自行调整章节的顺序或添加其他相关主题。&lt;/p&gt;
&lt;p&gt;  如果有任何写的不详细不具体或者有疑惑的地方，还请评论区积极告知于我，共同探讨，学习是相互的，一起学习，一起进步！如果特地需要找如上几期中某一期的内容，大家可以从主页中翻找，都归纳于一个系统，这里就不梳理特殊入口；至此如果还想我写其他系列学习教学，也可以私信或者评论区留言，我会第一时间给予回复便抽时间积极去响应。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-0&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;  数据处理在计算机科学中扮演着重要的角色。而数组作为一种常见的数据结构，对于存储和操作大量数据非常便捷。本文将以Java开发语言为例，深入探索数组的访问、操作和遍历的秘密，并提供具体的示例代码以加深理解。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-1&quot;&gt;摘要&lt;/h2&gt;
&lt;p&gt;  本文将从数组的基本概念入手，介绍数组的声明和初始化方式。随后，我们将深入探讨数组的访问、元素操作和遍历的方法。此外，我们还将提供实际的应用场景案例以及对数组的优缺点进行分析。最后，我们将介绍几个常用的数组类代码方法，并通过具体的Java代码测试用例来验证其功能。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-2&quot;&gt;简介&lt;/h2&gt;
&lt;h3 data-id=&quot;heading-3&quot;&gt;数组的基本概念&lt;/h3&gt;
&lt;p&gt;  数组是一种用于存储多个相同类型数据元素的数据结构。在内存中，数组以连续的方式存储这些元素，并通过索引来访问每个元素。Java提供了强大而灵活的数组操作功能，非常适用于处理大量数据。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-4&quot;&gt;Java中的数组&lt;/h3&gt;
&lt;p&gt;  在Java中，数组是一种引用类型，可以存储基本类型和对象类型。数组的长度在创建时就已经确定，并且无法改变。Java提供了丰富的数组操作方法和语法，使得数组的访问、操作和遍历变得非常简便。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-5&quot;&gt;源代码解析&lt;/h2&gt;
&lt;h3 data-id=&quot;heading-6&quot;&gt;数组的声明和初始化&lt;/h3&gt;
&lt;p&gt;  在Java中，我们通常使用以下两种方式来声明和初始化数组：&lt;/p&gt;
&lt;h4 data-id=&quot;heading-7&quot;&gt;静态初始化&lt;/h4&gt;
&lt;p&gt;  静态初始化是在声明数组的同时为其赋值。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] numbers = {&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;4&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码解读：&lt;/strong&gt; 这行代码我们创建了一个整数数组numbers，其中包含了5个元素：1, 2, 3, 4, 5。可以通过索引来访问数组中的元素，索引从0开始，所以numbers[0]表示第一个元素1，numbers[1]表示第二个元素2，以此类推。可以使用循环结构例如for循环来遍历数组中的元素。可以使用数组的length属性来获取数组的长度。例如，for(int i=0; i&amp;lt;numbers.length; i++)可以遍历数组中的所有元素。&lt;/p&gt;
&lt;h4 data-id=&quot;heading-8&quot;&gt;动态初始化&lt;/h4&gt;
&lt;p&gt;  动态初始化是在声明数组后分配内存空间，并为数组元素逐个赋值。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] numbers = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;int&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;];
&lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; i &amp;lt; numbers.length; i++) {
    numbers[i] = i + &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码解读：&lt;/strong&gt; 这段代码我们创建了一个整数数组 numbers，数组大小为 5。然后，使用 for 循环对数组进行遍历，将数组中的每个元素赋值为其索引值加 1。最终，数组 numbers 中的元素值依次为 1, 2, 3, 4, 5。这段代码创建了一个整数数组 numbers，数组大小为 5。然后，使用 for 循环对数组进行遍历，将数组中的每个元素赋值为其索引值加 1。最终，数组 numbers 中的元素值依次为 1, 2, 3, 4, 5。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-9&quot;&gt;数组的访问和操作&lt;/h3&gt;
&lt;p&gt;  通过索引访问数组元素是数组操作的基本操作之一。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; numbers[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;]; &lt;span class=&quot;hljs-comment&quot;&gt;// 读取数组第一个元素&lt;/span&gt;
numbers[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;] = &lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt;; &lt;span class=&quot;hljs-comment&quot;&gt;// 修改数组第二个元素的值&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码解读：&lt;/strong&gt; 这段代码我们首先声明一个整型变量value并将数组numbers的第一个元素赋值给它。然后，将数组numbers的第二个元素的值修改为10。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-10&quot;&gt;数组的遍历&lt;/h3&gt;
&lt;p&gt;  遍历数组是一种常见的操作，我们可以使用循环来访问数组的所有元素。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; i &amp;lt; numbers.length; i++) {
    System.out.println(numbers[i]);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码解读：&lt;/strong&gt; 这段代码我们是写的一个简单的循环结构，用来输出一个数组中的所有元素。代码中的 &lt;code&gt;int i = 0;&lt;/code&gt; 语句用于初始化一个变量 &lt;code&gt;i&lt;/code&gt;，并将其赋值为0，表示循环的起始位置。 &lt;code&gt;i &amp;lt; numbers.length;&lt;/code&gt; 则是循环的条件，当 &lt;code&gt;i&lt;/code&gt; 的值小于数组 &lt;code&gt;numbers&lt;/code&gt; 的长度时，继续循环。 &lt;code&gt;i++&lt;/code&gt; 表示每次循环结束后，将 &lt;code&gt;i&lt;/code&gt; 的值增加1。在每次循环中，&lt;code&gt;System.out.println(numbers[i]);&lt;/code&gt; 语句用于输出数组 &lt;code&gt;numbers&lt;/code&gt; 中索引为 &lt;code&gt;i&lt;/code&gt; 的元素。即，将数组中的每个元素逐个输出到控制台。总结起来，这段代码的作用是逐个输出一个整数数组 &lt;code&gt;numbers&lt;/code&gt; 中的每个元素。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-11&quot;&gt;应用场景案例&lt;/h3&gt;
&lt;p&gt;  数组在各种应用场景中都有广泛的应用。例如，我们可以使用数组来存储学生的成绩、实现简单的图像处理、进行排序和搜索等。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-12&quot;&gt;优缺点分析&lt;/h3&gt;
&lt;h4 data-id=&quot;heading-13&quot;&gt;优点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;数组提供了快速随机访问元素的能力。&lt;/li&gt;
&lt;li&gt;数组的内存分配是连续的，利于缓存的利用。&lt;/li&gt;
&lt;li&gt;数组操作简单，语法清晰，适用于处理大量数据。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-id=&quot;heading-14&quot;&gt;缺点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;数组的长度固定，无法动态改变。&lt;/li&gt;
&lt;li&gt;数组无法直接插入和删除元素，需要移动其他元素来实现。&lt;/li&gt;
&lt;li&gt;数组只能存储相同类型的元素。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-id=&quot;heading-15&quot;&gt;类代码方法介绍&lt;/h3&gt;
&lt;p&gt;  Java提供了Arrays类来实现对数组的一些操作，如排序、搜索等。以下是一些常用的数组类代码方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Arrays.sort()&lt;/code&gt;：对数组元素进行排序。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Arrays.binarySearch()&lt;/code&gt;：在排序后的数组中查找指定元素。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Arrays.equals()&lt;/code&gt;：比较两个数组是否相等。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Arrays.fill()&lt;/code&gt;：将数组的所有元素设置为指定的值。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-id=&quot;heading-16&quot;&gt;测试用例&lt;/h2&gt;
&lt;p&gt;  下面是一个简单的示例代码，演示了如何使用数组进行操作和遍历：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;package&lt;/span&gt; com.example.javase.wf;

&lt;span class=&quot;hljs-keyword&quot;&gt;import&lt;/span&gt; java.util.Arrays;

&lt;span class=&quot;hljs-comment&quot;&gt;/**
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Author&lt;/span&gt; wf
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Date&lt;/span&gt; 2024-02-09 13:14
 */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;ArrayExample&lt;/span&gt; {
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(String[] args)&lt;/span&gt; {
        &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] numbers = {&lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;8&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;};

        Arrays.sort(numbers); &lt;span class=&quot;hljs-comment&quot;&gt;// 对数组进行排序&lt;/span&gt;

        &lt;span class=&quot;hljs-comment&quot;&gt;// 遍历数组并打印每个元素&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; i &amp;lt; numbers.length; i++) {
            System.out.println(numbers[i]);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;根据如上部分测试用例，本地执行结果如下，仅供参考：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6b264293ff7d4786b6d44061a31aba60~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1145&amp;amp;h=884&amp;amp;s=61228&amp;amp;e=png&amp;amp;b=2c2c2c&quot; alt=&quot;在这里插入图片描述&quot; loading=&quot;lazy&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;测试代码解析：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;  针对如上测试代码，这里我再具体给大家讲解下，希望能够更透彻的帮助大家理解。
  根据如上代码作出解析：这段代码是一个简单的Java程序，它演示了如何使用数组并对数组进行排序。首先，程序定义了一个名为ArrayExample的公共类。在这个类中，有一个名为main的公共静态方法，作为程序的入口点。在main方法中，定义了一个名为numbers的整型数组，并使用初始化列表初始化它。具体来说，数组包含五个元素：5、2、8、3和1。接下来，使用Arrays类的sort方法对数组进行排序。这将按升序对数组元素进行排序，即将最小的元素放在数组的前面，最大的元素放在数组的后面。&lt;/p&gt;
&lt;p&gt;  最后，使用for循环遍历数组，并使用System.out.println方法打印每个元素。由于数组已经排序，所以打印出的元素将按升序排列。&lt;/p&gt;
&lt;p&gt;因此，程序的输出将是：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;大家也可以本地测试一下，验证结果是否与我一致。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-17&quot;&gt;全文小结&lt;/h2&gt;
&lt;p&gt;  本文深入探索了Java中数组的访问、操作和遍历方法。我们从数组的基本概念和语法入手，讨论了数组的声明和初始化方式。随后，我们详细介绍了数组的访问和操作方法，并提供了一些常用的数组类代码方法。此外，我们还给出了一个具体的Java代码测试用例。通过阅读本文，读者应该对数组在数据处理中的重要性有了更深入的理解，并能够灵活运用数组的功能。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-18&quot;&gt;总结&lt;/h2&gt;
&lt;p&gt;  数组作为一种常用的数据结构，在数据领域中起着重要的作用。通过本文的学习，我们了解了Java中数组的基本概念、声明和初始化方式。我们还探讨了数组的访问、操作和遍历方法，以及常用的数组类代码方法。此外，我们还讨论了数组的应用场景、优缺点分析。通过具体的Java代码测试用例，我们加深了对数组的理解和应用能力。希望本文能够帮助读者更好地掌握和应用数组的相关知识，在数据处理中发挥更大的作用。&lt;/p&gt;
&lt;h1 data-id=&quot;heading-19&quot;&gt;最后&lt;/h1&gt;
&lt;p&gt;  大家如果觉得看了本文有帮助的话，麻烦给不熬夜崽崽点个&lt;strong&gt;三连&lt;/strong&gt;（点赞、收藏、关注）支持一下哈，大家的支持就是我写作的无限动力。&lt;/p&gt;&lt;/div&gt;文章源地址：&lt;a href=https://juejin.cn/post/7339881936595255335 rel=&quot;nofollow&quot; &gt;https://juejin.cn/post/7339881936595255335&lt;/a&gt;</description><pubDate>Tue, 27 Feb 2024 13:36:55 +0800</pubDate></item><item><title>通往数据世界的奇妙入口：数组的基本概念与声明初始化</title><link>http://lidehe.cn/post/145.html</link><description>&lt;div id=&quot;article-root&quot; itemprop=&quot;articleBody&quot; class=&quot;article-viewer markdown-body result&quot; data-v-2c6459d4=&quot;&quot;&gt;&lt;style&gt;.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin:30px 0 10px;color:#cca152;position:relative;padding-left:50px;border-bottom:2px solid rgba(209,163,78,.6);padding-bottom:0}.markdown-body h1{font-size:30px}.markdown-body h1:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:80%;bottom:-10px;left:-2px}.markdown-body h2{font-size:24px}.markdown-body h2:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:70%;bottom:-15px;left:-1px}.markdown-body h3{font-size:18px}.markdown-body h3:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:60%;bottom:-19px;left:-2px}.markdown-body h4{font-size:16px;padding-left:0;border-bottom:1px solid rgba(209,163,78,.6)}.markdown-body h5{font-size:15px;padding-left:0}.markdown-body em{color:#cca152}.markdown-body del{text-decoration-color:#cca152;text-decoration-thickness:2px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:80%;margin:6px auto;box-shadow:0 6px 15px #8e8e8e;display:block;margin:20px auto!important;object-fit:contain;border-radius:8px}.markdown-body hr{border:none;border-top:2px solid #e0c9a1;margin-top:32px 0}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background:#f6efde;color:#b69454;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Mono,Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75;background:#fef6e1;border-radius:4px;box-shadow:0 0 8px hsla(0,0%,47%,.45)}.markdown-body pre:before{content:&quot;&quot;;display:block;height:30px;width:100%;margin-bottom:-7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAMAAABaWb9VAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAADsQAAA7EAZUrDhsAAACHUExURUdwTMxCKdc8NvdYT/9hVyLJPABBAGubKNiIOv+/K+ytJBakH9aZG+5QR5VZDOBDPhmtJ8+VGuGjH/CwJR26MR6+NBq0LPW1KBmwKetNRfJUTONHP92fHuSmIeFEPhu3LR29M/BTS+mqIuqsI5qdHyLKPP++Kv9gVf9lW//KLSXXQCTQP//FLMVm5KQAAAAldFJOUwAlPPz7+woBBPu8Mzu+FlRRKmvnweeG+Wqg6mVNXmuc1OCbmjZJWF/9AAABKklEQVQoz3WS6XaCMBCFRzAM++KGsqhtDwES3//5OtmA2uP9A9zwzRoAgBC0QgQrdA68OZsDr229YGHoIEj7Pl0ZOgjKa5lYJ4Rd1vijn3nuD4Qurjmv48o6RFyfbGDnS6DeEXZfk5ZfuBhdPb9I87ECNMh1EFJKIU6agWzaa01NbmLkxznSmmObJBkkUxrERf3i+ftRiZi7ShPCYY64UhTx1AR5CDYoMXkOKEY7GmTcTzeD/FiER68DfSLgSRqEIBoB3P8h3x8RZhBXGJGusJdD6rfCBl0YqvZNkrV9zej2cWlfJWG6fRpyM41qYH+GTPPi2yFLQYC0Qybm5o96lW77kMbcrBKtgeWTsthVamNXFF4I6x0DTPuugsVRFyYpyxzWqNvHJwed8ws7QyP1UwjNjwAAAABJRU5ErkJggg==) 10px 10px no-repeat;background-size:40px}.markdown-body pre&gt;code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#fef6e1}.markdown-body a{text-decoration:none;color:#d8ac5a;border-bottom:1px solid #d8ac5a}.markdown-body a:active,.markdown-body a:hover{color:#93753f;border-color:#93753f}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f4e8c7;border-collapse:collapse}.markdown-body thead{background:rgba(255,227,176,.6588235294);text-align:left;display:table-header-group;border-bottom:1px solid rgba(255,227,176,.6588235294)}.markdown-body tbody{background:rgba(255,247,229,.3882352941)}.markdown-body td,.markdown-body th{padding:7px;line-height:24px;min-width:100px}.markdown-body blockquote{color:#bd954f;padding:1px 23px;margin:22px 0;border-left:4px solid #dcb267;background-color:#fff7e5}.markdown-body blockquote:after{display:block;content:&quot;&quot;}.markdown-body blockquote&gt;p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol .task-list-item,.markdown-body ul .task-list-item{list-style:none}.markdown-body ol li{padding-left:6px}.markdown-body::marker{color:#dcb267}.markdown-body .contains-task-list{padding-left:0}.markdown-body .contains-task-list .task-list-item{list-style:none;position:relative}.markdown-body .contains-task-list .task-list-item input[type=checkbox]{position:relative;top:2px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:before{content:&quot;&quot;;display:inline-block;height:12px;width:12px;position:absolute;left:-2px;top:-2px;border:2px solid #cda152;border-radius:5px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:checked{position:relative;top:2px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:checked:before{border:none;content:&quot;&quot;;display:inline-block;height:17px;width:17px;position:absolute;left:-2px;top:-2px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAAAXNSR0IArs4c6QAAAYhJREFUOBFjYACC0/MDGsDEiyvr/zOCeUwMJxn/A8HZRUEMYBFGJsZ6kFoQYALiAyAGCgDpA+sFijKeWRj4H1kWpIWBW1SDQcm+BCzOAiK/vr7BcO/gDbAAI4hE1waWgRBnmWCGIwkyKFjnwow0BhsJk9QLncvw5dV1oPE9MCEGmBWrgCKhcFEowyR+PSNYwemFAZ4M/xjMkRWYJm5oAPFB/joDpI1BHHQANgGPDxj+//vfCA4IdJ3GcevgQnAFhlHLwYIgSVA0wABcwY3tFQzokiBFGIEP0wmigW5wZAK5FFkQib0a6NUDcEmgb7AGFpIGZOZqoMFhIAFQknEAJpn9yLLEssFOBCp2IFaDkl0xg6C8FbJyB3gowUS5RdQYBORQYpVB1iwVHIIMwJh///AYTCmYRklNIBFmNi4GeYt0BhnjeIa3dw8wSBlEgDUhxw2yCRgGfHp2geHiqiSwUwUVrFAiFVkjjA1LrjgTHEwhFvosMCZM4NEIUoAtWWNoBGZ70/gN22HiAD2uhAzsYNBZAAAAAElFTkSuQmCC) 0 0 no-repeat;background-size:100%}@media (max-width:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}&lt;/style&gt;&lt;style data-highlight=&quot;&quot; data-highlight-key=&quot;androidstudio&quot;&gt;.markdown-body pre,.markdown-body pre&gt;code.hljs{color:#a9b7c6;background:#282b2e}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-symbol{color:#6897bb}.hljs-deletion,.hljs-keyword,.hljs-selector-tag{color:#cc7832}.hljs-link,.hljs-template-variable,.hljs-variable{color:#629755}.hljs-comment,.hljs-quote{color:grey}.hljs-meta{color:#bbb529}.hljs-addition,.hljs-attribute,.hljs-string{color:#6a8759}.hljs-section,.hljs-title,.hljs-type{color:#ffc66d}.hljs-name,.hljs-selector-class,.hljs-selector-id{color:#e8bf6a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}&lt;/style&gt;&lt;blockquote&gt;
&lt;p&gt;  &lt;a href=&quot;https://juejin.cn/column/7271287156571389991&quot; target=&quot;_blank&quot; title=&quot;https://juejin.cn/column/7271287156571389991&quot;&gt;《Java零基础教学》&lt;/a&gt;是一套深入浅出的 Java 编程入门教程。全套教程从Java基础语法开始，适合初学者快速入门，同时也从实例的角度进行了深入浅出的讲解，让初学者能够更好地理解Java编程思想和应用。&lt;/p&gt;
&lt;p&gt;  本教程内容包括数据类型与运算、流程控制、数组、函数、面向对象基础、字符串、集合、异常处理、IO 流及多线程等 Java 编程基础知识，并提供丰富的实例和练习，帮助读者巩固所学知识。本教程不仅适合初学者学习，也适合已经掌握一定 Java 基础的读者进行查漏补缺。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;  为了应某一读者的邀请，此次我特地梳理了一期以Java之数组系列，给新手小白或者初级者入门级零基础学习，加上完整且系统性的学习，希望能帮助到有需要的伙伴们，如下为这期学习内容的章节小结。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数组的基本概念&lt;/li&gt;
&lt;li&gt;数组的声明和初始化&lt;/li&gt;
&lt;li&gt;数组的访问和操作&lt;/li&gt;
&lt;li&gt;多维数组&lt;/li&gt;
&lt;li&gt;数组的排序和搜索&lt;/li&gt;
&lt;li&gt;动态数组和ArrayList&lt;/li&gt;
&lt;li&gt;数组的常见问题和解决方案&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  如上数组篇之小章节内容涵盖了Java数组的基本概念、声明、初始化、访问、操作、多维数组、排序、搜索、动态数组和常见问题解决方案等内容。通过系统学习这些章节，你将全面理解和掌握Java中数组的使用和相关技巧。你也可以根据需要自行调整章节的顺序或添加其他相关主题。&lt;/p&gt;
&lt;p&gt;  如果有任何写的不详细不具体或者有疑惑的地方，还请评论区积极告知于我，共同探讨，学习是相互的，一起学习，一起进步！如果特地需要找如上几期中某一期的内容，大家可以从主页中翻找，都归纳于一个系统，这里就不梳理特殊入口；至此如果还想我写其他系列学习教学，也可以私信或者评论区留言，我会第一时间给予回复便抽时间积极去响应。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-0&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;  数组作为一种基本的数据结构，在数据处理中扮演着重要的角色。本文将带您深入探索数组的基本概念和声明初始化，帮助您理解数组的运作方式，并为进一步学习和应用数组打下坚实的基础。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-1&quot;&gt;摘要&lt;/h2&gt;
&lt;p&gt;  本文旨在全面介绍数组的基本概念和声明初始化方式，通过具体的Java代码示例和解析，帮助读者深入理解并掌握数组的核心概念和用法。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-2&quot;&gt;简介&lt;/h2&gt;
&lt;p&gt;  数组作为一种存储和组织数据的重要工具，具有固定大小和相同类型元素的特点。在本节中，我们将详细介绍数组的定义，探讨数组在数据处理中的重要性和用途，并介绍在Java开发语言中使用数组的注意事项。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-3&quot;&gt;源代码解析&lt;/h2&gt;
&lt;h3 data-id=&quot;heading-4&quot;&gt;1. 数组的声明和初始化&lt;/h3&gt;
&lt;p&gt;  在Java中，声明和初始化数组非常简单直观。我们将通过具体的代码示例来解析一维数组和多维数组的声明和初始化过程。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;// 声明和初始化一维数组&lt;/span&gt;
&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] numbers = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;int&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;];
&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] numbers = {&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;4&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;};

&lt;span class=&quot;hljs-comment&quot;&gt;// 声明和初始化二维数组&lt;/span&gt;
&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[][] matrix = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;int&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;][&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;];
&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[][] matrix = {{&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;}, {&lt;span class=&quot;hljs-number&quot;&gt;4&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;6&lt;/span&gt;}, {&lt;span class=&quot;hljs-number&quot;&gt;7&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;8&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;9&lt;/span&gt;}};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  我们将详细讲解如何声明和初始化数组，并介绍数组的索引和访问方式。&lt;/p&gt;
&lt;p&gt;  借此，针对这个代码示例中，我们展示了如何声明和初始化一维数组和二维数组。&lt;/p&gt;
&lt;p&gt;  首先，我们展示了两种方式来声明和初始化一维数组。第一种方式是使用关键字&lt;code&gt;new&lt;/code&gt;来创建一个指定大小的数组。在这个示例中，我们创建了一个长度为5的整型数组。这样做会自动初始化数组的元素为默认值（对于整型数组来说，默认值为0）。第二种方式是使用花括号&lt;code&gt;{}&lt;/code&gt;来初始化数组，并且在花括号中指定数组的元素。在这个示例中，我们创建了一个包含5个元素的整型数组，并且将值1、2、3、4、5分别赋给数组的元素。接下来，我们展示了两种方式来声明和初始化二维数组。&lt;/p&gt;
&lt;p&gt;  第一种方式是使用关键字&lt;code&gt;new&lt;/code&gt;来创建一个指定行数和列数的二维数组。在这个示例中，我们创建了一个3行3列的整型二维数组。这样做会自动初始化数组的元素为默认值（对于整型数组来说，默认值为0）。&lt;/p&gt;
&lt;p&gt;  第二种方式是使用花括号&lt;code&gt;{}&lt;/code&gt;来初始化二维数组，并且在花括号中指定每行的元素。在这个示例中，我们创建了一个3行3列的整型二维数组，并且分别将1、2、3赋给第一行的元素，4、5、6赋给第二行的元素，7、8、9赋给第三行的元素。&lt;/p&gt;
&lt;p&gt;  这就是声明和初始化一维数组和二维数组的基本语法和用法。您可以根据实际需求来选择合适的方式来声明和初始化数组。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-5&quot;&gt;应用场景案例&lt;/h2&gt;
&lt;p&gt;  数组作为一种重要的数据结构，广泛应用于各个领域。在本节中，我们将探讨一些实际应用场景，展示数组在数据处理中的实际用途和灵活性。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-6&quot;&gt;优缺点分析&lt;/h2&gt;
&lt;h3 data-id=&quot;heading-7&quot;&gt;优点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;数组能够快速访问元素，通过索引可以高效地定位和处理数据。&lt;/li&gt;
&lt;li&gt;数组具有固定长度，不会动态扩展和收缩，使得数据的组织和操作更简便。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-id=&quot;heading-8&quot;&gt;缺点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;数组长度固定，无法动态增加或减少，需要预先确定大小，可能导致内存的浪费或空间的不足。&lt;/li&gt;
&lt;li&gt;插入和删除数组中的元素较为复杂，需要移动其他元素来维持数组的连续性。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在本节中，我们将对数组的优点和缺点进行分析，以帮助读者更好地权衡使用数组的利与弊。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-9&quot;&gt;类代码方法介绍&lt;/h2&gt;
&lt;p&gt;  Java提供了一系列用于操作数组的类和方法。在本节中，我们将介绍常用的数组操作方法，包括获取数组长度、访问和修改数组元素、数组排序和搜索等。&lt;/p&gt;
&lt;p&gt;具体内容请查阅&lt;a href=&quot;https://link.juejin.cn?target=https%3A%2F%2Fdocs.oracle.com%2Fen%2Fjava%2Fjavase%2F15%2Fdocs%2Fapi%2Fjava.base%2Fjava%2Futil%2FArrays.html&quot; target=&quot;_blank&quot; title=&quot;https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/Arrays.html&quot; ref=&quot;nofollow noopener noreferrer&quot;&gt;&lt;code&gt;java.util.Arrays&lt;/code&gt;&lt;/a&gt;类中的方法介绍。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-10&quot;&gt;具体的Java代码测试用例&lt;/h2&gt;
&lt;p&gt;  为了帮助读者更好地理解和应用数组的概念和操作，我们提供了一些具体的Java代码测试用例。这些测试用例将演示数组的声明、初始化和操作，确保读者能够通过实际编写代码来检验所学内容。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;package&lt;/span&gt; com.example.javase.wf;

&lt;span class=&quot;hljs-keyword&quot;&gt;import&lt;/span&gt; java.util.Arrays;

&lt;span class=&quot;hljs-comment&quot;&gt;/**
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Author&lt;/span&gt; wf
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Date&lt;/span&gt; 2024-02-09 13:14
 */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;ArrayExamples&lt;/span&gt; {
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(String[] args)&lt;/span&gt; {
        &lt;span class=&quot;hljs-comment&quot;&gt;// 例子1：声明和初始化一维数组&lt;/span&gt;
        &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] numbers = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;int&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;];
        &lt;span class=&quot;hljs-comment&quot;&gt;// &lt;span class=&quot;hljs-doctag&quot;&gt;TODO:&lt;/span&gt; 补充代码，将数组 numbers 初始化为 {1, 2, 3, 4, 5}&lt;/span&gt;
        System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;一维数组 numbers: &quot;&lt;/span&gt; + Arrays.toString(numbers));

        &lt;span class=&quot;hljs-comment&quot;&gt;// 例子2：声明和初始化二维数组&lt;/span&gt;
        &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[][] matrix = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;int&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;][&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;];
        &lt;span class=&quot;hljs-comment&quot;&gt;// &lt;span class=&quot;hljs-doctag&quot;&gt;TODO:&lt;/span&gt; 补充代码，将二维数组 matrix 初始化为 {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}&lt;/span&gt;
        System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;二维数组 matrix:&quot;&lt;/span&gt;);
        &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; i &amp;lt; matrix.length; i++) {
            &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; j &amp;lt; matrix[i].length; j++) {
                System.out.print(matrix[i][j] + &lt;span class=&quot;hljs-string&quot;&gt;&quot; &quot;&lt;/span&gt;);
            }
            System.out.println();
        }

        &lt;span class=&quot;hljs-comment&quot;&gt;// 例子3：数组元素的访问&lt;/span&gt;
        &lt;span class=&quot;hljs-comment&quot;&gt;// &lt;span class=&quot;hljs-doctag&quot;&gt;TODO:&lt;/span&gt; 补充代码，访问并打印一维数组中的第3个元素和二维数组中的第2行第2列的元素&lt;/span&gt;

        &lt;span class=&quot;hljs-comment&quot;&gt;// 例子4：数组元素的修改&lt;/span&gt;
        &lt;span class=&quot;hljs-comment&quot;&gt;// &lt;span class=&quot;hljs-doctag&quot;&gt;TODO:&lt;/span&gt; 补充代码，将一维数组中的第4个元素修改为10，二维数组中的第1行第3列的元素修改为20&lt;/span&gt;

        &lt;span class=&quot;hljs-comment&quot;&gt;// 例子5：数组的长度&lt;/span&gt;
        &lt;span class=&quot;hljs-comment&quot;&gt;// &lt;span class=&quot;hljs-doctag&quot;&gt;TODO:&lt;/span&gt; 补充代码，计算并打印一维数组和二维数组的长度&lt;/span&gt;

        &lt;span class=&quot;hljs-comment&quot;&gt;// 例子6：数组的遍历&lt;/span&gt;
        &lt;span class=&quot;hljs-comment&quot;&gt;// &lt;span class=&quot;hljs-doctag&quot;&gt;TODO:&lt;/span&gt; 补充代码，使用 for-each 循环遍历一维数组并打印每个元素&lt;/span&gt;
        &lt;span class=&quot;hljs-comment&quot;&gt;// &lt;span class=&quot;hljs-doctag&quot;&gt;TODO:&lt;/span&gt; 补充代码，使用双层 for 循环遍历二维数组并打印每个元素&lt;/span&gt;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  根据如上部分测试用例，本地执行结果如下，仅供参考：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1ca0a2301a97423d80e7e9d627a9e45a~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1145&amp;amp;h=862&amp;amp;s=95985&amp;amp;e=png&amp;amp;b=2b2b2b&quot; alt=&quot;在这里插入图片描述&quot; loading=&quot;lazy&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;测试代码解析：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;  针对如上测试代码，这里我再具体给大家讲解下，希望能够更透彻的帮助大家理解。&lt;/p&gt;
&lt;p&gt;  如上代码是一个Java类，名为ArrayExamples。它包含一个main方法作为程序的入口点。&lt;/p&gt;
&lt;p&gt;  在main方法中，有6个例子展示了数组的不同操作。&lt;/p&gt;
&lt;p&gt;  针对例子1：声明和初始化一维数组
在例子1中，一个名为numbers的int类型数组被声明并初始化为长度为5的数组。在TODO注释处，需要将数组numbers的元素初始化为{1, 2, 3, 4, 5}。&lt;/p&gt;
&lt;p&gt;  例子2：声明和初始化二维数组
在例子2中，一个名为matrix的int类型二维数组被声明并初始化为3行3列的数组。在TODO注释处，需要将二维数组matrix的元素初始化为{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}。&lt;/p&gt;
&lt;p&gt;  例子3：数组元素的访问
在TODO注释处，需要访问并打印一维数组中的第3个元素和二维数组中的第2行第2列的元素。&lt;/p&gt;
&lt;p&gt;  例子4：数组元素的修改
在TODO注释处，需要将一维数组中的第4个元素修改为10，二维数组中的第1行第3列的元素修改为20。&lt;/p&gt;
&lt;p&gt;  例子5：数组的长度
在TODO注释处，需要计算并打印一维数组和二维数组的长度。&lt;/p&gt;
&lt;p&gt;  例子6：数组的遍历
在TODO注释处，使用for-each循环遍历一维数组并打印每个元素。使用双层for循环遍历二维数组并打印每个元素。&lt;/p&gt;
&lt;p&gt;  然后我还写了一些预留给同学们做课后作业检测一下学习入门程度，请按照注释的提示补充代码，理解并运行测试用例，以验证对数组的操作和方法的理解。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-11&quot;&gt;全文小结&lt;/h2&gt;
&lt;p&gt;  通过本文的学习，我们了解了数组的基本概念和声明初始化方式，详细介绍了Java语言中数组的使用和操作方法。我们探索了数组在数据处理中的应用场景，并分析了数组的优缺点。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-12&quot;&gt;总结&lt;/h2&gt;
&lt;p&gt;  在数据世界中，数组是一项强大而必不可少的工具，它能够帮助我们有效地组织和处理数据。通过掌握数组的基本概念和声明初始化方式，我们能够更好地应用数组来解决实际问题。&lt;/p&gt;
&lt;p&gt;  请继续深入研究和实践数组的相关知识，并探索更多关于数组的高级操作和应用。只有真正理解和掌握数组，我们才能更好地迈入数据世界的奇妙之门。&lt;/p&gt;
&lt;p&gt;  希望本文能为小伙伴们提供有关数组的基本概念和操作的全面指南！如有任何问题，请随时提问。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 data-id=&quot;heading-13&quot;&gt;最后&lt;/h1&gt;
&lt;p&gt;  大家如果觉得看了本文有帮助的话，麻烦给不熬夜崽崽点个&lt;strong&gt;三连&lt;/strong&gt;（点赞、收藏、关注）支持一下哈，大家的支持就是我写作的无限动力。&lt;/p&gt;&lt;/div&gt;文章源地址：&lt;a href=https://juejin.cn/post/7339809470321803275 rel=&quot;nofollow&quot; &gt;https://juejin.cn/post/7339809470321803275&lt;/a&gt;</description><pubDate>Tue, 27 Feb 2024 13:36:53 +0800</pubDate></item><item><title>穿越数据迷宫：多维数组的声明、访问、操作与遍历</title><link>http://lidehe.cn/post/144.html</link><description>&lt;div id=&quot;article-root&quot; itemprop=&quot;articleBody&quot; class=&quot;article-viewer markdown-body result&quot; data-v-2c6459d4=&quot;&quot;&gt;&lt;style&gt;.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin:30px 0 10px;color:#cca152;position:relative;padding-left:50px;border-bottom:2px solid rgba(209,163,78,.6);padding-bottom:0}.markdown-body h1{font-size:30px}.markdown-body h1:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:80%;bottom:-10px;left:-2px}.markdown-body h2{font-size:24px}.markdown-body h2:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:70%;bottom:-15px;left:-1px}.markdown-body h3{font-size:18px}.markdown-body h3:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:60%;bottom:-19px;left:-2px}.markdown-body h4{font-size:16px;padding-left:0;border-bottom:1px solid rgba(209,163,78,.6)}.markdown-body h5{font-size:15px;padding-left:0}.markdown-body em{color:#cca152}.markdown-body del{text-decoration-color:#cca152;text-decoration-thickness:2px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:80%;margin:6px auto;box-shadow:0 6px 15px #8e8e8e;display:block;margin:20px auto!important;object-fit:contain;border-radius:8px}.markdown-body hr{border:none;border-top:2px solid #e0c9a1;margin-top:32px 0}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background:#f6efde;color:#b69454;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Mono,Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75;background:#fef6e1;border-radius:4px;box-shadow:0 0 8px hsla(0,0%,47%,.45)}.markdown-body pre:before{content:&quot;&quot;;display:block;height:30px;width:100%;margin-bottom:-7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAMAAABaWb9VAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAADsQAAA7EAZUrDhsAAACHUExURUdwTMxCKdc8NvdYT/9hVyLJPABBAGubKNiIOv+/K+ytJBakH9aZG+5QR5VZDOBDPhmtJ8+VGuGjH/CwJR26MR6+NBq0LPW1KBmwKetNRfJUTONHP92fHuSmIeFEPhu3LR29M/BTS+mqIuqsI5qdHyLKPP++Kv9gVf9lW//KLSXXQCTQP//FLMVm5KQAAAAldFJOUwAlPPz7+woBBPu8Mzu+FlRRKmvnweeG+Wqg6mVNXmuc1OCbmjZJWF/9AAABKklEQVQoz3WS6XaCMBCFRzAM++KGsqhtDwES3//5OtmA2uP9A9zwzRoAgBC0QgQrdA68OZsDr229YGHoIEj7Pl0ZOgjKa5lYJ4Rd1vijn3nuD4Qurjmv48o6RFyfbGDnS6DeEXZfk5ZfuBhdPb9I87ECNMh1EFJKIU6agWzaa01NbmLkxznSmmObJBkkUxrERf3i+ftRiZi7ShPCYY64UhTx1AR5CDYoMXkOKEY7GmTcTzeD/FiER68DfSLgSRqEIBoB3P8h3x8RZhBXGJGusJdD6rfCBl0YqvZNkrV9zej2cWlfJWG6fRpyM41qYH+GTPPi2yFLQYC0Qybm5o96lW77kMbcrBKtgeWTsthVamNXFF4I6x0DTPuugsVRFyYpyxzWqNvHJwed8ws7QyP1UwjNjwAAAABJRU5ErkJggg==) 10px 10px no-repeat;background-size:40px}.markdown-body pre&gt;code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#fef6e1}.markdown-body a{text-decoration:none;color:#d8ac5a;border-bottom:1px solid #d8ac5a}.markdown-body a:active,.markdown-body a:hover{color:#93753f;border-color:#93753f}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f4e8c7;border-collapse:collapse}.markdown-body thead{background:rgba(255,227,176,.6588235294);text-align:left;display:table-header-group;border-bottom:1px solid rgba(255,227,176,.6588235294)}.markdown-body tbody{background:rgba(255,247,229,.3882352941)}.markdown-body td,.markdown-body th{padding:7px;line-height:24px;min-width:100px}.markdown-body blockquote{color:#bd954f;padding:1px 23px;margin:22px 0;border-left:4px solid #dcb267;background-color:#fff7e5}.markdown-body blockquote:after{display:block;content:&quot;&quot;}.markdown-body blockquote&gt;p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol .task-list-item,.markdown-body ul .task-list-item{list-style:none}.markdown-body ol li{padding-left:6px}.markdown-body::marker{color:#dcb267}.markdown-body .contains-task-list{padding-left:0}.markdown-body .contains-task-list .task-list-item{list-style:none;position:relative}.markdown-body .contains-task-list .task-list-item input[type=checkbox]{position:relative;top:2px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:before{content:&quot;&quot;;display:inline-block;height:12px;width:12px;position:absolute;left:-2px;top:-2px;border:2px solid #cda152;border-radius:5px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:checked{position:relative;top:2px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:checked:before{border:none;content:&quot;&quot;;display:inline-block;height:17px;width:17px;position:absolute;left:-2px;top:-2px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAAAXNSR0IArs4c6QAAAYhJREFUOBFjYACC0/MDGsDEiyvr/zOCeUwMJxn/A8HZRUEMYBFGJsZ6kFoQYALiAyAGCgDpA+sFijKeWRj4H1kWpIWBW1SDQcm+BCzOAiK/vr7BcO/gDbAAI4hE1waWgRBnmWCGIwkyKFjnwow0BhsJk9QLncvw5dV1oPE9MCEGmBWrgCKhcFEowyR+PSNYwemFAZ4M/xjMkRWYJm5oAPFB/joDpI1BHHQANgGPDxj+//vfCA4IdJ3GcevgQnAFhlHLwYIgSVA0wABcwY3tFQzokiBFGIEP0wmigW5wZAK5FFkQib0a6NUDcEmgb7AGFpIGZOZqoMFhIAFQknEAJpn9yLLEssFOBCp2IFaDkl0xg6C8FbJyB3gowUS5RdQYBORQYpVB1iwVHIIMwJh///AYTCmYRklNIBFmNi4GeYt0BhnjeIa3dw8wSBlEgDUhxw2yCRgGfHp2geHiqiSwUwUVrFAiFVkjjA1LrjgTHEwhFvosMCZM4NEIUoAtWWNoBGZ70/gN22HiAD2uhAzsYNBZAAAAAElFTkSuQmCC) 0 0 no-repeat;background-size:100%}@media (max-width:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}&lt;/style&gt;&lt;style data-highlight=&quot;&quot; data-highlight-key=&quot;androidstudio&quot;&gt;.markdown-body pre,.markdown-body pre&gt;code.hljs{color:#a9b7c6;background:#282b2e}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-symbol{color:#6897bb}.hljs-deletion,.hljs-keyword,.hljs-selector-tag{color:#cc7832}.hljs-link,.hljs-template-variable,.hljs-variable{color:#629755}.hljs-comment,.hljs-quote{color:grey}.hljs-meta{color:#bbb529}.hljs-addition,.hljs-attribute,.hljs-string{color:#6a8759}.hljs-section,.hljs-title,.hljs-type{color:#ffc66d}.hljs-name,.hljs-selector-class,.hljs-selector-id{color:#e8bf6a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}&lt;/style&gt;&lt;blockquote&gt;
&lt;p&gt;  &lt;a href=&quot;https://juejin.cn/column/7271287156571389991&quot; target=&quot;_blank&quot; title=&quot;https://juejin.cn/column/7271287156571389991&quot;&gt;《Java零基础教学》&lt;/a&gt;是一套深入浅出的 Java 编程入门教程。全套教程从Java基础语法开始，适合初学者快速入门，同时也从实例的角度进行了深入浅出的讲解，让初学者能够更好地理解Java编程思想和应用。&lt;/p&gt;
&lt;p&gt;  本教程内容包括数据类型与运算、流程控制、数组、函数、面向对象基础、字符串、集合、异常处理、IO 流及多线程等 Java 编程基础知识，并提供丰富的实例和练习，帮助读者巩固所学知识。本教程不仅适合初学者学习，也适合已经掌握一定 Java 基础的读者进行查漏补缺。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;  为了应某一读者的邀请，此次我特地梳理了一期以Java之数组系列，给新手小白或者初级者入门级零基础学习，加上完整且系统性的学习，希望能帮助到有需要的伙伴们，如下为这期学习内容的章节小结。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数组的基本概念&lt;/li&gt;
&lt;li&gt;数组的声明和初始化&lt;/li&gt;
&lt;li&gt;数组的访问和操作&lt;/li&gt;
&lt;li&gt;多维数组&lt;/li&gt;
&lt;li&gt;数组的排序和搜索&lt;/li&gt;
&lt;li&gt;动态数组和ArrayList&lt;/li&gt;
&lt;li&gt;数组的常见问题和解决方案&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  如上数组篇之小章节内容涵盖了Java数组的基本概念、声明、初始化、访问、操作、多维数组、排序、搜索、动态数组和常见问题解决方案等内容。通过系统学习这些章节，你将全面理解和掌握Java中数组的使用和相关技巧。你也可以根据需要自行调整章节的顺序或添加其他相关主题。&lt;/p&gt;
&lt;p&gt;  如果有任何写的不详细不具体或者有疑惑的地方，还请评论区积极告知于我，共同探讨，学习是相互的，一起学习，一起进步！如果特地需要找如上几期中某一期的内容，大家可以从主页中翻找，都归纳于一个系统，这里就不梳理特殊入口；至此如果还想我写其他系列学习教学，也可以私信或者评论区留言，我会第一时间给予回复便抽时间积极去响应。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-0&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;  在数据处理领域，多维数组是一种强大的数据结构，能够存储和操作更复杂的数据。本文将以Java开发语言为例，深入探究多维数组的声明、访问、操作和遍历的方法。通过具体的示例代码，帮助读者更好地理解和应用多维数组。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-1&quot;&gt;摘要&lt;/h2&gt;
&lt;p&gt;  本文将介绍多维数组的基本概念和用法。首先，我们将从声明和初始化多维数组入手，讨论多维数组的创建方式。随后，我们将深入探讨多维数组的访问和操作方法，并提供实际的应用场景案例和优缺点分析。此外，我们还将介绍几个常用的多维数组类代码方法，并通过具体的Java代码测试用例来展示其功能。最后，我们将对全文进行小结和总结。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-2&quot;&gt;简介&lt;/h2&gt;
&lt;h3 data-id=&quot;heading-3&quot;&gt;多维数组的概念&lt;/h3&gt;
&lt;p&gt;  多维数组是指包含多个维度的数组，可以理解为数组的数组。它允许我们在一个数据结构中存储和访问更复杂的数据。在Java中，我们可以使用多维数组来表示矩阵、图像等具有多个维度的数据。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-4&quot;&gt;Java中的多维数组&lt;/h3&gt;
&lt;p&gt;  在Java中，多维数组实际上是一维数组的扩展。我们可以使用多维数组来创建二维、三维甚至更高维度的数据结构。Java中的多维数组由多个方括号来表示不同的维度。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-5&quot;&gt;源代码解析&lt;/h2&gt;
&lt;h3 data-id=&quot;heading-6&quot;&gt;多维数组的声明和初始化&lt;/h3&gt;
&lt;p&gt;  在Java中，我们可以使用以下方式来声明和初始化多维数组：&lt;/p&gt;
&lt;h4 data-id=&quot;heading-7&quot;&gt;二维数组的声明和初始化&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[][] matrix = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;int&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;][&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;];
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码解析：&lt;/strong&gt;  根据如上代码，我们可以知道：这段代码创建了一个3x3的整数矩阵matrix。int[][] matrix = new int[3][3];matrix是一个二维整数数组，类型为int[][]。二维数组是一种特殊的数组类型，它的元素也是数组。这里matrix是一个3x3的矩阵，因此它有3个元素，每个元素都是一个数组。new int[3][3]是用来创建一个3x3的整数数组的语法。这里new关键字用来创建一个新的数组对象，int[3]表示每个元素是一个长度为3的数组，因此整个matrix数组就有3个这样的元素，即3行3列。&lt;/p&gt;
&lt;h4 data-id=&quot;heading-8&quot;&gt;三维数组的声明和初始化&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[][][] cube = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;int&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;][&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;][&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;];
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码解析：&lt;/strong&gt;  根据如上代码，我们可以知道：这段代码创建了一个三维数组cube，它有3个维度，每个维度的大小都是3。每个维度都是一个二维数组，大小为3x3。可以将这个三维数组想象成一个3x3x3的立方体，其中每个小块都是一个整数。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-9&quot;&gt;多维数组的访问和操作&lt;/h3&gt;
&lt;p&gt;  多维数组的访问和操作方式与一维数组类似，只是需要通过多个索引来定位对应的元素。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; matrix[&lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;][&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;]; &lt;span class=&quot;hljs-comment&quot;&gt;// 读取二维数组中的元素&lt;/span&gt;
cube[&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;][&lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;][&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;] = &lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt;; &lt;span class=&quot;hljs-comment&quot;&gt;// 修改三维数组中的元素值&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码解析：&lt;/strong&gt;  根据如上代码，我们可以知道：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;第一行代码中，通过&lt;code&gt;matrix[0][1]&lt;/code&gt;读取了二维数组&lt;code&gt;matrix&lt;/code&gt;中第一行第二列的元素的值，然后将其赋给了变量&lt;code&gt;value&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;第二行代码中，通过&lt;code&gt;cube[1][0][2]&lt;/code&gt;访问了三维数组&lt;code&gt;cube&lt;/code&gt;中第二个二维数组的第一行第三列的元素，将其值修改为10。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-id=&quot;heading-10&quot;&gt;多维数组的遍历&lt;/h3&gt;
&lt;p&gt;  多维数组的遍历可以使用嵌套的循环来完成，每一层循环对应一个维度。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; i &amp;lt; matrix.length; i++) {
    &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; j &amp;lt; matrix[i].length; j++) {
        System.out.println(matrix[i][j]);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码解析：&lt;/strong&gt;  根据如上代码，我们可以知道：这段代码的作用是遍历一个二维数组matrix，并打印出其中的每个元素。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;外层循环：for (int i = 0; i &amp;lt; matrix.length; i++)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这个循环用来遍历二维数组的行。i表示当前的行数，从0开始，最大值为matrix.length-1（数组的长度减1）。&lt;/li&gt;
&lt;li&gt;matrix.length表示二维数组matrix的行数。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;内层循环：for (int j = 0; j &amp;lt; matrix[i].length; j++)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这个循环用来遍历二维数组的列。j表示当前的列数，从0开始，最大值为matrix[i].length-1（当前行的列数-1）。&lt;/li&gt;
&lt;li&gt;matrix[i].length表示二维数组matrix第i行的列数。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打印元素：System.out.println(matrix[i][j])&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通过matrix[i][j]访问二维数组matrix中的元素。&lt;/li&gt;
&lt;li&gt;使用System.out.println()将元素打印输出。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  这段代码的执行过程是，从第一行开始，依次遍历每一行的每一列，并将元素打印输出。最终，会按照二维数组matrix的行列顺序打印出所有元素。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-11&quot;&gt;应用场景案例&lt;/h3&gt;
&lt;p&gt;  多维数组在各种应用场景中都有广泛的应用。例如，我们可以使用二维数组来表示迷宫地图，使用三维数组来表示立体图像。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-12&quot;&gt;优缺点分析&lt;/h3&gt;
&lt;h4 data-id=&quot;heading-13&quot;&gt;优点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;多维数组可以更好地表示和处理多维数据结构。&lt;/li&gt;
&lt;li&gt;多维数组提供了方便的访问和操作方式。&lt;/li&gt;
&lt;li&gt;多维数组在某些应用场景下可以提高程序的效率。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-id=&quot;heading-14&quot;&gt;缺点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;多维数组的创建和操作相对复杂，对内存的需求较高。&lt;/li&gt;
&lt;li&gt;多维数组的维数过多可能导致代码的可读性和维护性变差。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-id=&quot;heading-15&quot;&gt;类代码方法介绍&lt;/h3&gt;
&lt;p&gt;  Java提供了Arrays类来实现对多维数组的一些操作，如排序、搜索等。以下是一些常用的多维数组类代码方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Arrays.sort()&lt;/code&gt;：对多维数组的某一维度进行排序。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Arrays.binarySearch()&lt;/code&gt;：在排序后的多维数组中查找指定元素。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Arrays.equals()&lt;/code&gt;：比较两个多维数组是否相等。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Arrays.fill()&lt;/code&gt;：将多维数组的所有元素设置为指定的值。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-id=&quot;heading-16&quot;&gt;测试用例&lt;/h2&gt;
&lt;p&gt;  下面是一个简单的示例代码，演示了如何使用二维数组进行操作和遍历：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;package&lt;/span&gt; com.example.javase.wf;

&lt;span class=&quot;hljs-comment&quot;&gt;/**
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Author&lt;/span&gt; wf
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Date&lt;/span&gt; 2024-02-09 13:14
 */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;MultiDimensionalArrayExample&lt;/span&gt; {
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(String[] args)&lt;/span&gt; {
        &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[][] matrix = {
                {&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;},
                {&lt;span class=&quot;hljs-number&quot;&gt;4&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;6&lt;/span&gt;},
                {&lt;span class=&quot;hljs-number&quot;&gt;7&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;8&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;9&lt;/span&gt;}
        };

        &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; i &amp;lt; matrix.length; i++) {
            &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; j &amp;lt; matrix[i].length; j++) {
                System.out.println(matrix[i][j]);
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  根据如上部分测试用例，本地执行结果如下，仅供参考：
&lt;strong&gt;输出结果：&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;4&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;6&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;7&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;8&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;9&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0f7c2cf11e4f4b94a6e0152ae8263dc4~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1151&amp;amp;h=884&amp;amp;s=61546&amp;amp;e=png&amp;amp;b=2b2b2b&quot; alt=&quot;在这里插入图片描述&quot; loading=&quot;lazy&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;测试代码解析：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;  针对如上测试代码，这里我再具体给大家讲解下，希望能够更透彻的帮助大家理解。
  根据如上代码作出解析：这段代码是一个Java程序，其中定义了一个名为MultiDimensionalArrayExample的公共类。在main方法中，创建了一个二维数组matrix，并初始化了它的元素值。&lt;/p&gt;
&lt;p&gt;  接下来，使用嵌套的for循环遍历二维数组。外层循环控制行数，内层循环控制列数。通过matrix.length获取二维数组的行数，通过matrix[i].length获取每行的列数。&lt;/p&gt;
&lt;p&gt;  在循环中，使用System.out.println打印出每个元素的值。注意，使用println而不是print，这样每个元素会单独占一行。&lt;/p&gt;
&lt;p&gt;  最终的输出结果为：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;4&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;6&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;7&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;8&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;9&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  你们也可本地测试执行下，检验结果是否与我一致。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-17&quot;&gt;全文小结&lt;/h2&gt;
&lt;p&gt;  本文深入探讨了Java中多维数组的声明、访问、操作和遍历方法。我们通过具体的示例代码介绍了多维数组的创建方式，并讨论了多维数组的访问和操作方法。我们还提供了实际的应用场景案例和优缺点分析，帮助读者更好地理解多维数组的意义和应用。最后，我们介绍了几个常用的多维数组类代码方法，并通过具体的Java代码测试用例展示了它们的功能。通过本文的学习，读者应该对多维数组有了更深入的理解，并能够灵活运用多维数组解决实际问题。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-18&quot;&gt;总结&lt;/h2&gt;
&lt;p&gt;  多维数组是一种强大的数据结构，在数据处理领域中发挥着重要的作用。本文以Java开发语言为例，深入探究了多维数组的声明、访问、操作和遍历方法。我们从多维数组的基本概念和语法入手，介绍了多维数组的声明和初始化方式。随后，我们详细讨论了多维数组的访问和操作方法，并提供了一些常用的多维数组类代码方法。在实际应用中，我们可以根据具体需求灵活运用多维数组。通过具体的Java代码测试用例，我们加深了对多维数组的理解和掌握。希望本文能够帮助读者更好地理解和应用多维数组，在数据处理中取得更好的效果。&lt;/p&gt;
&lt;h1 data-id=&quot;heading-19&quot;&gt;最后&lt;/h1&gt;
&lt;p&gt;  大家如果觉得看了本文有帮助的话，麻烦给不熬夜崽崽点个&lt;strong&gt;三连&lt;/strong&gt;（点赞、收藏、关注）支持一下哈，大家的支持就是我写作的无限动力。&lt;/p&gt;&lt;/div&gt;文章源地址：&lt;a href=https://juejin.cn/post/7339881936595288103 rel=&quot;nofollow&quot; &gt;https://juejin.cn/post/7339881936595288103&lt;/a&gt;</description><pubDate>Tue, 27 Feb 2024 13:36:50 +0800</pubDate></item><item><title>探索数据的秘密之旅：数组的排序算法和搜索技巧</title><link>http://lidehe.cn/post/143.html</link><description>&lt;div id=&quot;article-root&quot; itemprop=&quot;articleBody&quot; class=&quot;article-viewer markdown-body result&quot; data-v-2c6459d4=&quot;&quot;&gt;&lt;style&gt;.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin:30px 0 10px;color:#cca152;position:relative;padding-left:50px;border-bottom:2px solid rgba(209,163,78,.6);padding-bottom:0}.markdown-body h1{font-size:30px}.markdown-body h1:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:80%;bottom:-10px;left:-2px}.markdown-body h2{font-size:24px}.markdown-body h2:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:70%;bottom:-15px;left:-1px}.markdown-body h3{font-size:18px}.markdown-body h3:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:60%;bottom:-19px;left:-2px}.markdown-body h4{font-size:16px;padding-left:0;border-bottom:1px solid rgba(209,163,78,.6)}.markdown-body h5{font-size:15px;padding-left:0}.markdown-body em{color:#cca152}.markdown-body del{text-decoration-color:#cca152;text-decoration-thickness:2px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:80%;margin:6px auto;box-shadow:0 6px 15px #8e8e8e;display:block;margin:20px auto!important;object-fit:contain;border-radius:8px}.markdown-body hr{border:none;border-top:2px solid #e0c9a1;margin-top:32px 0}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background:#f6efde;color:#b69454;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Mono,Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75;background:#fef6e1;border-radius:4px;box-shadow:0 0 8px hsla(0,0%,47%,.45)}.markdown-body pre:before{content:&quot;&quot;;display:block;height:30px;width:100%;margin-bottom:-7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAMAAABaWb9VAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAADsQAAA7EAZUrDhsAAACHUExURUdwTMxCKdc8NvdYT/9hVyLJPABBAGubKNiIOv+/K+ytJBakH9aZG+5QR5VZDOBDPhmtJ8+VGuGjH/CwJR26MR6+NBq0LPW1KBmwKetNRfJUTONHP92fHuSmIeFEPhu3LR29M/BTS+mqIuqsI5qdHyLKPP++Kv9gVf9lW//KLSXXQCTQP//FLMVm5KQAAAAldFJOUwAlPPz7+woBBPu8Mzu+FlRRKmvnweeG+Wqg6mVNXmuc1OCbmjZJWF/9AAABKklEQVQoz3WS6XaCMBCFRzAM++KGsqhtDwES3//5OtmA2uP9A9zwzRoAgBC0QgQrdA68OZsDr229YGHoIEj7Pl0ZOgjKa5lYJ4Rd1vijn3nuD4Qurjmv48o6RFyfbGDnS6DeEXZfk5ZfuBhdPb9I87ECNMh1EFJKIU6agWzaa01NbmLkxznSmmObJBkkUxrERf3i+ftRiZi7ShPCYY64UhTx1AR5CDYoMXkOKEY7GmTcTzeD/FiER68DfSLgSRqEIBoB3P8h3x8RZhBXGJGusJdD6rfCBl0YqvZNkrV9zej2cWlfJWG6fRpyM41qYH+GTPPi2yFLQYC0Qybm5o96lW77kMbcrBKtgeWTsthVamNXFF4I6x0DTPuugsVRFyYpyxzWqNvHJwed8ws7QyP1UwjNjwAAAABJRU5ErkJggg==) 10px 10px no-repeat;background-size:40px}.markdown-body pre&gt;code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#fef6e1}.markdown-body a{text-decoration:none;color:#d8ac5a;border-bottom:1px solid #d8ac5a}.markdown-body a:active,.markdown-body a:hover{color:#93753f;border-color:#93753f}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f4e8c7;border-collapse:collapse}.markdown-body thead{background:rgba(255,227,176,.6588235294);text-align:left;display:table-header-group;border-bottom:1px solid rgba(255,227,176,.6588235294)}.markdown-body tbody{background:rgba(255,247,229,.3882352941)}.markdown-body td,.markdown-body th{padding:7px;line-height:24px;min-width:100px}.markdown-body blockquote{color:#bd954f;padding:1px 23px;margin:22px 0;border-left:4px solid #dcb267;background-color:#fff7e5}.markdown-body blockquote:after{display:block;content:&quot;&quot;}.markdown-body blockquote&gt;p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol .task-list-item,.markdown-body ul .task-list-item{list-style:none}.markdown-body ol li{padding-left:6px}.markdown-body::marker{color:#dcb267}.markdown-body .contains-task-list{padding-left:0}.markdown-body .contains-task-list .task-list-item{list-style:none;position:relative}.markdown-body .contains-task-list .task-list-item input[type=checkbox]{position:relative;top:2px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:before{content:&quot;&quot;;display:inline-block;height:12px;width:12px;position:absolute;left:-2px;top:-2px;border:2px solid #cda152;border-radius:5px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:checked{position:relative;top:2px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:checked:before{border:none;content:&quot;&quot;;display:inline-block;height:17px;width:17px;position:absolute;left:-2px;top:-2px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAAAXNSR0IArs4c6QAAAYhJREFUOBFjYACC0/MDGsDEiyvr/zOCeUwMJxn/A8HZRUEMYBFGJsZ6kFoQYALiAyAGCgDpA+sFijKeWRj4H1kWpIWBW1SDQcm+BCzOAiK/vr7BcO/gDbAAI4hE1waWgRBnmWCGIwkyKFjnwow0BhsJk9QLncvw5dV1oPE9MCEGmBWrgCKhcFEowyR+PSNYwemFAZ4M/xjMkRWYJm5oAPFB/joDpI1BHHQANgGPDxj+//vfCA4IdJ3GcevgQnAFhlHLwYIgSVA0wABcwY3tFQzokiBFGIEP0wmigW5wZAK5FFkQib0a6NUDcEmgb7AGFpIGZOZqoMFhIAFQknEAJpn9yLLEssFOBCp2IFaDkl0xg6C8FbJyB3gowUS5RdQYBORQYpVB1iwVHIIMwJh///AYTCmYRklNIBFmNi4GeYt0BhnjeIa3dw8wSBlEgDUhxw2yCRgGfHp2geHiqiSwUwUVrFAiFVkjjA1LrjgTHEwhFvosMCZM4NEIUoAtWWNoBGZ70/gN22HiAD2uhAzsYNBZAAAAAElFTkSuQmCC) 0 0 no-repeat;background-size:100%}@media (max-width:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}&lt;/style&gt;&lt;style data-highlight=&quot;&quot; data-highlight-key=&quot;androidstudio&quot;&gt;.markdown-body pre,.markdown-body pre&gt;code.hljs{color:#a9b7c6;background:#282b2e}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-symbol{color:#6897bb}.hljs-deletion,.hljs-keyword,.hljs-selector-tag{color:#cc7832}.hljs-link,.hljs-template-variable,.hljs-variable{color:#629755}.hljs-comment,.hljs-quote{color:grey}.hljs-meta{color:#bbb529}.hljs-addition,.hljs-attribute,.hljs-string{color:#6a8759}.hljs-section,.hljs-title,.hljs-type{color:#ffc66d}.hljs-name,.hljs-selector-class,.hljs-selector-id{color:#e8bf6a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}&lt;/style&gt;&lt;blockquote&gt;
&lt;p&gt;  &lt;a href=&quot;https://juejin.cn/column/7271287156571389991&quot; target=&quot;_blank&quot; title=&quot;https://juejin.cn/column/7271287156571389991&quot;&gt;《Java零基础教学》&lt;/a&gt;是一套深入浅出的 Java 编程入门教程。全套教程从Java基础语法开始，适合初学者快速入门，同时也从实例的角度进行了深入浅出的讲解，让初学者能够更好地理解Java编程思想和应用。&lt;/p&gt;
&lt;p&gt;  本教程内容包括数据类型与运算、流程控制、数组、函数、面向对象基础、字符串、集合、异常处理、IO 流及多线程等 Java 编程基础知识，并提供丰富的实例和练习，帮助读者巩固所学知识。本教程不仅适合初学者学习，也适合已经掌握一定 Java 基础的读者进行查漏补缺。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;  为了应某一读者的邀请，此次我特地梳理了一期以Java之数组系列，给新手小白或者初级者入门级零基础学习，加上完整且系统性的学习，希望能帮助到有需要的伙伴们，如下为这期学习内容的章节小结。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数组的基本概念&lt;/li&gt;
&lt;li&gt;数组的声明和初始化&lt;/li&gt;
&lt;li&gt;数组的访问和操作&lt;/li&gt;
&lt;li&gt;多维数组&lt;/li&gt;
&lt;li&gt;数组的排序和搜索&lt;/li&gt;
&lt;li&gt;动态数组和ArrayList&lt;/li&gt;
&lt;li&gt;数组的常见问题和解决方案&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  如上数组篇之小章节内容涵盖了Java数组的基本概念、声明、初始化、访问、操作、多维数组、排序、搜索、动态数组和常见问题解决方案等内容。通过系统学习这些章节，你将全面理解和掌握Java中数组的使用和相关技巧。你也可以根据需要自行调整章节的顺序或添加其他相关主题。&lt;/p&gt;
&lt;p&gt;  如果有任何写的不详细不具体或者有疑惑的地方，还请评论区积极告知于我，共同探讨，学习是相互的，一起学习，一起进步！如果特地需要找如上几期中某一期的内容，大家可以从主页中翻找，都归纳于一个系统，这里就不梳理特殊入口；至此如果还想我写其他系列学习教学，也可以私信或者评论区留言，我会第一时间给予回复便抽时间积极去响应。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-0&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;  数据处理中的排序和搜索是关键的算法技巧，能够帮助我们处理和利用数据。本文将以Java开发语言为例，深入探索数组的排序算法和搜索技巧。通过具体的示例代码，帮助读者更好地理解和应用这些技术。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-1&quot;&gt;摘要&lt;/h2&gt;
&lt;p&gt;  本文将介绍数组排序和搜索的基本概念，结合具体的示例代码，详细讲解数组排序算法和搜索技巧的实现。我们将深入探讨常见的排序算法（如冒泡排序、插入排序、快速排序）和搜索技巧（如线性搜索、二分搜索），并提供实际的应用场景案例和优缺点分析。此外，我们还将介绍几个常用的数组排序和搜索类代码方法，并通过具体的Java代码测试用例来演示其功能。最后，我们将对全文进行小结和总结。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-2&quot;&gt;简介&lt;/h2&gt;
&lt;h3 data-id=&quot;heading-3&quot;&gt;数组排序的概念&lt;/h3&gt;
&lt;p&gt;  数组排序是指对数组中的元素按照一定的规则重新排列的过程。排序可以使数组元素按照升序或降序的方式排列，使得数据更加有序，便于后续的操作和分析。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-4&quot;&gt;数组搜索的概念&lt;/h3&gt;
&lt;p&gt;  数组搜索是指在给定的数组中查找指定的元素的过程。搜索可以帮助我们快速找到目标元素的位置，以便进行进一步的处理和使用。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-5&quot;&gt;源代码解析&lt;/h2&gt;
&lt;h3 data-id=&quot;heading-6&quot;&gt;数组的排序算法&lt;/h3&gt;
&lt;h4 data-id=&quot;heading-7&quot;&gt;冒泡排序&lt;/h4&gt;
&lt;p&gt;  冒泡排序是一种简单的排序算法，它重复地遍历要排序的数组，比较相邻的两个元素，并根据排序规则交换它们的位置。&lt;/p&gt;
&lt;p&gt;以下是冒泡排序的实现代码：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;package&lt;/span&gt; com.example.javase.wf;

&lt;span class=&quot;hljs-comment&quot;&gt;/**
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Author&lt;/span&gt; wf
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Date&lt;/span&gt; 2024-02-09 13:14
 */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;BubbleSort&lt;/span&gt; {
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;bubbleSort&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr)&lt;/span&gt; {
        &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;n&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; arr.length;
        &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; i &amp;lt; n - &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;; i++) {
            &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;j&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; j &amp;lt; n - i - &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;; j++) {
                &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (arr[j] &amp;gt; arr[j+&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;]) {
                    &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;temp&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; arr[j];
                    arr[j] = arr[j+&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;];
                    arr[j+&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;] = temp;
                }
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;具体代码展示如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5259437b7aa5460ead2bb981075a39b1~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1087&amp;amp;h=589&amp;amp;s=44231&amp;amp;e=png&amp;amp;b=2b2b2b&quot; alt=&quot;在这里插入图片描述&quot; loading=&quot;lazy&quot;&gt;&lt;/p&gt;
&lt;p&gt;以下是线性搜索的示例代码：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;package&lt;/span&gt; com.example.javase.wf;

&lt;span class=&quot;hljs-comment&quot;&gt;/**
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Author&lt;/span&gt; wf
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Date&lt;/span&gt; 2024-02-09 13:14
 */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;LinearSearch&lt;/span&gt; {
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;linearSearch&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr, &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; target)&lt;/span&gt; {
        &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; i &amp;lt; arr.length; i++) {
            &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (arr[i] == target) {
                &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; i;
            }
        }
        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; -&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;具体代码展示如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/10c3cfe6d3404e61a85c34e2ac8c0034~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1084&amp;amp;h=589&amp;amp;s=38549&amp;amp;e=png&amp;amp;b=2b2b2b&quot; alt=&quot;在这里插入图片描述&quot; loading=&quot;lazy&quot;&gt;&lt;/p&gt;
&lt;p&gt;以下是二分搜索的示例代码：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;package&lt;/span&gt; com.example.javase.wf;

&lt;span class=&quot;hljs-comment&quot;&gt;/**
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Author&lt;/span&gt; wf
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Date&lt;/span&gt; 2024-02-09 13:14
 */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;BinarySearch&lt;/span&gt; {
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;binarySearch&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr, &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; target)&lt;/span&gt; {
        &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;left&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;;
        &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;right&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; arr.length - &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;;
        &lt;span class=&quot;hljs-keyword&quot;&gt;while&lt;/span&gt; (left &amp;lt;= right) {
            &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;mid&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; left + (right - left) / &lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;;
            &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (arr[mid] == target) {
                &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; mid;
            }
            &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (arr[mid] &amp;lt; target) {
                left = mid + &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;;
            } &lt;span class=&quot;hljs-keyword&quot;&gt;else&lt;/span&gt; {
                right = mid - &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;;
            }
        }
        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; -&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;具体代码展示如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5d0336f7423045dc9d69694b2e9ad1ab~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1019&amp;amp;h=591&amp;amp;s=45000&amp;amp;e=png&amp;amp;b=2b2b2b&quot; alt=&quot;在这里插入图片描述&quot; loading=&quot;lazy&quot;&gt;&lt;/p&gt;
&lt;h2 data-id=&quot;heading-8&quot;&gt;应用场景案例&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;排序算法应用场景案例&lt;/strong&gt;
排序算法可以用于各种不同的场景，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对一个学生数组按照姓名进行字典序排序&lt;/li&gt;
&lt;li&gt;对数字数组按照从小到大进行排序&lt;/li&gt;
&lt;li&gt;对一组日志数据按照时间戳进行排序
&lt;strong&gt;搜索技巧应用场景案例&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;搜索技巧可以用于以下场景，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在一个有序数组中查找指定的元素&lt;/li&gt;
&lt;li&gt;在一个无序数组中查找出现次数最多的元素&lt;/li&gt;
&lt;li&gt;在一个字符串数组中查找包含特定字符串的元素
&lt;strong&gt;优缺点分析&lt;/strong&gt;
排序算法和搜索技巧各自具有一定的优缺点：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;排序算法的优缺点&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;冒泡排序简单直观，但效率较低，时间复杂度为O(n^2)。&lt;/li&gt;
&lt;li&gt;插入排序适用于部分有序的数组，但对于大规模乱序的数组，性能较差，时间复杂度为O(n^2)。&lt;/li&gt;
&lt;li&gt;快速排序效率较高，时间复杂度为O(nlogn)，但在最坏情况下可能退化为O(n^2)。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;搜索技巧的优缺点&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;线性搜索简单易懂，但效率较低，时间复杂度为O(n)。&lt;/li&gt;
&lt;li&gt;二分搜索适用于有序数组，查找速度快，时间复杂度为O(logn)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-id=&quot;heading-9&quot;&gt;类代码方法介绍&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;冒泡排序方法&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;bubbleSort(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  该方法使用冒泡排序算法对给定的整数数组进行排序。它在每次遍历中比较相邻的两个元素，并按照从小到大的顺序交换它们。遍历过程重复执行，直到数组完全排序。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;插入排序方法&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;insertionSort(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  该方法使用插入排序算法对给定的整数数组进行排序。它将数组分为已排序和未排序两个部分，每次从未排序部分取出一个元素，并将其插入到已排序部分的适当位置，直到整个数组排序完成。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;线性搜索方法&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;linearSearch(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr, &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; target)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  该方法使用线性搜索技巧在给定的整数数组中查找特定元素。它遍历数组中的每个元素，依次比较目标元素，如果找到则返回其索引，否则返回-1表示未找到。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二分搜索方法&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;binarySearch(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr, &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; target)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  该方法使用二分搜索技巧在给定的有序整数数组中查找特定元素。它利用数组有序的特性，通过逐步缩小搜索范围，最终找到目标元素的索引，如果未找到则返回-1。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-10&quot;&gt;小结&lt;/h2&gt;
&lt;p&gt;  通过本文的学习，我们全面了解了Java数组的使用和相关技巧。文章首先介绍了数组的基本概念、声明、初始化、访问和操作等内容，帮助读者掌握数组的基本用法。然后，我们学习了多维数组的使用方法和注意事项，使得读者能够灵活应用多维数组解决实际问题。接下来，文章深入探讨了数组的排序和搜索算法，包括冒泡排序、插入排序、快速排序、线性搜索和二分搜索等。通过具体的代码示例和应用案例，读者能够更好地理解和应用这些算法和技巧。最后，文章介绍了动态数组和ArrayList的使用，以及常见的数组问题和解决方案。&lt;/p&gt;
&lt;p&gt;  在学习过程中，我们发现排序算法和搜索技巧各自具有一定的优缺点。冒泡排序简单直观但效率较低，插入排序适用于部分有序数组但对大规模乱序数组性能较差，快速排序效率较高但最坏情况下可能退化为O(n^2)。线性搜索简单易懂但效率较低，二分搜索适用于有序数组查找速度快。因此，在实际应用中，我们需要根据具体情况选择合适的排序算法和搜索技巧。&lt;/p&gt;
&lt;p&gt;  最后，文章介绍了几个常用的数组排序和搜索类方法，并给出了具体的Java代码测试用例。这些方法包括冒泡排序方法、插入排序方法、线性搜索方法和二分搜索方法。读者可以直接使用这些方法来实现自己的需求。&lt;/p&gt;
&lt;p&gt;  通过本文的学习，初中时希望读者将全面掌握Java数组的使用和相关技巧，能够灵活运用排序算法和搜索技巧解决实际问题。同时，读者也可以根据个人需求自行调整章节顺序或添加其他相关主题。希望本文能够帮助到有需要的伙伴们，共同学习，共同进步！&lt;/p&gt;
&lt;h1 data-id=&quot;heading-11&quot;&gt;最后&lt;/h1&gt;
&lt;p&gt;  大家如果觉得看了本文有帮助的话，麻烦给不熬夜崽崽点个&lt;strong&gt;三连&lt;/strong&gt;（点赞、收藏、关注）支持一下哈，大家的支持就是我写作的无限动力。&lt;/p&gt;&lt;/div&gt;文章源地址：&lt;a href=https://juejin.cn/post/7339742783237177407 rel=&quot;nofollow&quot; &gt;https://juejin.cn/post/7339742783237177407&lt;/a&gt;</description><pubDate>Tue, 27 Feb 2024 13:36:48 +0800</pubDate></item><item><title>遍历大法好：走进ArrayList的元素遍历技巧</title><link>http://lidehe.cn/post/142.html</link><description>&lt;div id=&quot;article-root&quot; itemprop=&quot;articleBody&quot; class=&quot;article-viewer markdown-body result&quot; data-v-2c6459d4=&quot;&quot;&gt;&lt;style&gt;.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin:30px 0 10px;color:#cca152;position:relative;padding-left:50px;border-bottom:2px solid rgba(209,163,78,.6);padding-bottom:0}.markdown-body h1{font-size:30px}.markdown-body h1:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:80%;bottom:-10px;left:-2px}.markdown-body h2{font-size:24px}.markdown-body h2:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:70%;bottom:-15px;left:-1px}.markdown-body h3{font-size:18px}.markdown-body h3:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:60%;bottom:-19px;left:-2px}.markdown-body h4{font-size:16px;padding-left:0;border-bottom:1px solid rgba(209,163,78,.6)}.markdown-body h5{font-size:15px;padding-left:0}.markdown-body em{color:#cca152}.markdown-body del{text-decoration-color:#cca152;text-decoration-thickness:2px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:80%;margin:6px auto;box-shadow:0 6px 15px #8e8e8e;display:block;margin:20px auto!important;object-fit:contain;border-radius:8px}.markdown-body hr{border:none;border-top:2px solid #e0c9a1;margin-top:32px 0}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background:#f6efde;color:#b69454;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Mono,Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75;background:#fef6e1;border-radius:4px;box-shadow:0 0 8px hsla(0,0%,47%,.45)}.markdown-body pre:before{content:&quot;&quot;;display:block;height:30px;width:100%;margin-bottom:-7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAMAAABaWb9VAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAADsQAAA7EAZUrDhsAAACHUExURUdwTMxCKdc8NvdYT/9hVyLJPABBAGubKNiIOv+/K+ytJBakH9aZG+5QR5VZDOBDPhmtJ8+VGuGjH/CwJR26MR6+NBq0LPW1KBmwKetNRfJUTONHP92fHuSmIeFEPhu3LR29M/BTS+mqIuqsI5qdHyLKPP++Kv9gVf9lW//KLSXXQCTQP//FLMVm5KQAAAAldFJOUwAlPPz7+woBBPu8Mzu+FlRRKmvnweeG+Wqg6mVNXmuc1OCbmjZJWF/9AAABKklEQVQoz3WS6XaCMBCFRzAM++KGsqhtDwES3//5OtmA2uP9A9zwzRoAgBC0QgQrdA68OZsDr229YGHoIEj7Pl0ZOgjKa5lYJ4Rd1vijn3nuD4Qurjmv48o6RFyfbGDnS6DeEXZfk5ZfuBhdPb9I87ECNMh1EFJKIU6agWzaa01NbmLkxznSmmObJBkkUxrERf3i+ftRiZi7ShPCYY64UhTx1AR5CDYoMXkOKEY7GmTcTzeD/FiER68DfSLgSRqEIBoB3P8h3x8RZhBXGJGusJdD6rfCBl0YqvZNkrV9zej2cWlfJWG6fRpyM41qYH+GTPPi2yFLQYC0Qybm5o96lW77kMbcrBKtgeWTsthVamNXFF4I6x0DTPuugsVRFyYpyxzWqNvHJwed8ws7QyP1UwjNjwAAAABJRU5ErkJggg==) 10px 10px no-repeat;background-size:40px}.markdown-body pre&gt;code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#fef6e1}.markdown-body a{text-decoration:none;color:#d8ac5a;border-bottom:1px solid #d8ac5a}.markdown-body a:active,.markdown-body a:hover{color:#93753f;border-color:#93753f}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f4e8c7;border-collapse:collapse}.markdown-body thead{background:rgba(255,227,176,.6588235294);text-align:left;display:table-header-group;border-bottom:1px solid rgba(255,227,176,.6588235294)}.markdown-body tbody{background:rgba(255,247,229,.3882352941)}.markdown-body td,.markdown-body th{padding:7px;line-height:24px;min-width:100px}.markdown-body blockquote{color:#bd954f;padding:1px 23px;margin:22px 0;border-left:4px solid #dcb267;background-color:#fff7e5}.markdown-body blockquote:after{display:block;content:&quot;&quot;}.markdown-body blockquote&gt;p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol .task-list-item,.markdown-body ul .task-list-item{list-style:none}.markdown-body ol li{padding-left:6px}.markdown-body::marker{color:#dcb267}.markdown-body .contains-task-list{padding-left:0}.markdown-body .contains-task-list .task-list-item{list-style:none;position:relative}.markdown-body .contains-task-list .task-list-item input[type=checkbox]{position:relative;top:2px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:before{content:&quot;&quot;;display:inline-block;height:12px;width:12px;position:absolute;left:-2px;top:-2px;border:2px solid #cda152;border-radius:5px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:checked{position:relative;top:2px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:checked:before{border:none;content:&quot;&quot;;display:inline-block;height:17px;width:17px;position:absolute;left:-2px;top:-2px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAAAXNSR0IArs4c6QAAAYhJREFUOBFjYACC0/MDGsDEiyvr/zOCeUwMJxn/A8HZRUEMYBFGJsZ6kFoQYALiAyAGCgDpA+sFijKeWRj4H1kWpIWBW1SDQcm+BCzOAiK/vr7BcO/gDbAAI4hE1waWgRBnmWCGIwkyKFjnwow0BhsJk9QLncvw5dV1oPE9MCEGmBWrgCKhcFEowyR+PSNYwemFAZ4M/xjMkRWYJm5oAPFB/joDpI1BHHQANgGPDxj+//vfCA4IdJ3GcevgQnAFhlHLwYIgSVA0wABcwY3tFQzokiBFGIEP0wmigW5wZAK5FFkQib0a6NUDcEmgb7AGFpIGZOZqoMFhIAFQknEAJpn9yLLEssFOBCp2IFaDkl0xg6C8FbJyB3gowUS5RdQYBORQYpVB1iwVHIIMwJh///AYTCmYRklNIBFmNi4GeYt0BhnjeIa3dw8wSBlEgDUhxw2yCRgGfHp2geHiqiSwUwUVrFAiFVkjjA1LrjgTHEwhFvosMCZM4NEIUoAtWWNoBGZ70/gN22HiAD2uhAzsYNBZAAAAAElFTkSuQmCC) 0 0 no-repeat;background-size:100%}@media (max-width:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}&lt;/style&gt;&lt;style data-highlight=&quot;&quot; data-highlight-key=&quot;androidstudio&quot;&gt;.markdown-body pre,.markdown-body pre&gt;code.hljs{color:#a9b7c6;background:#282b2e}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-symbol{color:#6897bb}.hljs-deletion,.hljs-keyword,.hljs-selector-tag{color:#cc7832}.hljs-link,.hljs-template-variable,.hljs-variable{color:#629755}.hljs-comment,.hljs-quote{color:grey}.hljs-meta{color:#bbb529}.hljs-addition,.hljs-attribute,.hljs-string{color:#6a8759}.hljs-section,.hljs-title,.hljs-type{color:#ffc66d}.hljs-name,.hljs-selector-class,.hljs-selector-id{color:#e8bf6a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}&lt;/style&gt;&lt;blockquote&gt;
&lt;p&gt;  &lt;a href=&quot;https://juejin.cn/column/7271287156571389991&quot; target=&quot;_blank&quot; title=&quot;https://juejin.cn/column/7271287156571389991&quot;&gt;《Java零基础教学》&lt;/a&gt;是一套深入浅出的 Java 编程入门教程。全套教程从Java基础语法开始，适合初学者快速入门，同时也从实例的角度进行了深入浅出的讲解，让初学者能够更好地理解Java编程思想和应用。&lt;/p&gt;
&lt;p&gt;  本教程内容包括数据类型与运算、流程控制、数组、函数、面向对象基础、字符串、集合、异常处理、IO 流及多线程等 Java 编程基础知识，并提供丰富的实例和练习，帮助读者巩固所学知识。本教程不仅适合初学者学习，也适合已经掌握一定 Java 基础的读者进行查漏补缺。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;  为了应某一读者的邀请，此次我特地梳理了一期以Java之数组系列，给新手小白或者初级者入门级零基础学习，加上完整且系统性的学习，希望能帮助到有需要的伙伴们，如下为这期学习内容的章节小结。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数组的基本概念&lt;/li&gt;
&lt;li&gt;数组的声明和初始化&lt;/li&gt;
&lt;li&gt;数组的访问和操作&lt;/li&gt;
&lt;li&gt;多维数组&lt;/li&gt;
&lt;li&gt;数组的排序和搜索&lt;/li&gt;
&lt;li&gt;动态数组和ArrayList&lt;/li&gt;
&lt;li&gt;数组的常见问题和解决方案&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  如上数组篇之小章节内容涵盖了Java数组的基本概念、声明、初始化、访问、操作、多维数组、排序、搜索、动态数组和常见问题解决方案等内容。通过系统学习这些章节，你将全面理解和掌握Java中数组的使用和相关技巧。你也可以根据需要自行调整章节的顺序或添加其他相关主题。&lt;/p&gt;
&lt;p&gt;  如果有任何写的不详细不具体或者有疑惑的地方，还请评论区积极告知于我，共同探讨，学习是相互的，一起学习，一起进步！如果特地需要找如上几期中某一期的内容，大家可以从主页中翻找，都归纳于一个系统，这里就不梳理特殊入口；至此如果还想我写其他系列学习教学，也可以私信或者评论区留言，我会第一时间给予回复便抽时间积极去响应。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-0&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;  在Java开发中，ArrayList是一种常用的动态数组，提供了丰富的方法来操作和管理元素。其中，元素的遍历是我们经常需要用到的操作之一。本文将以Java语言为例，介绍ArrayList元素的遍历技巧，帮助读者更好地理解和应用ArrayList。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-1&quot;&gt;摘要&lt;/h2&gt;
&lt;p&gt;  本文将详细介绍ArrayList元素的遍历技巧，包括常用的三种遍历方式：普通for循环、增强for循环和迭代器。通过实例演示和代码解析，我们将深入探讨每种遍历方式的优缺点和适用场景。此外，我们还提供了一些类代码方法介绍和具体的Java代码测试用例。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-2&quot;&gt;简介&lt;/h2&gt;
&lt;p&gt;  ArrayList是Java集合框架中的一个重要类，它实现了可调整大小的数组。ArrayList提供了一系列方法来方便地操作和管理元素，其中元素的遍历是一项基本操作。通过遍历ArrayList，我们可以逐个访问和处理其中的元素。不同的遍历方式在复杂度和性能上有所差异，根据具体情况选择合适的方法可以提高代码的效率。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-3&quot;&gt;源代码解析&lt;/h3&gt;
&lt;h4 data-id=&quot;heading-4&quot;&gt;1. 普通for循环遍历元素&lt;/h4&gt;
&lt;p&gt;  使用普通for循环遍历ArrayList的元素是一种常见的方法。我们可以通过索引来访问ArrayList中的元素，并对其进行操作。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;ArrayList&amp;lt;Integer&amp;gt; list = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;ArrayList&lt;/span&gt;&amp;lt;&amp;gt;();
list.add(&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;);
list.add(&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;);
list.add(&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;);

&lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; i &amp;lt; list.size(); i++) {
    &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;element&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; list.get(i);
    System.out.println(element);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  上述代码中，我们通过调用&lt;code&gt;list.size()&lt;/code&gt;方法获取ArrayList的大小，然后使用循环索引遍历元素。通过&lt;code&gt;list.get(i)&lt;/code&gt;方法可以获取指定索引位置的元素值。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;代码解析：&lt;/strong&gt;  根据如上代码，我们可以知道：这段代码创建了一个ArrayList对象，并向列表中添加了三个整数元素，分别是1、2和3。然后，通过for循环遍历列表中的每个元素。循环使用一个整数变量i作为索引，从0开始，逐渐增加，直到达到列表的大小为止（不包括列表的大小）。在每次循环中，使用列表的get()方法获取索引为i的元素，并将其赋值给一个整数变量element。然后，通过System.out.println()方法打印出element的值。&lt;/p&gt;
&lt;p&gt;  因此，最终的输出结果是：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-id=&quot;heading-5&quot;&gt;2. 增强for循环遍历元素&lt;/h4&gt;
&lt;p&gt;  增强for循环，也称为foreach循环，是Java 5引入的一种语法糖。它可以方便地遍历数组和集合类。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;ArrayList&amp;lt;Integer&amp;gt; list = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;ArrayList&lt;/span&gt;&amp;lt;&amp;gt;();
list.add(&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;);
list.add(&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;);
list.add(&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;);

&lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; element : list) {
    System.out.println(element);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  上述代码中，我们可以直接使用增强for循环遍历ArrayList的元素，无需使用索引。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;代码解析：&lt;/strong&gt;  根据如上代码，我们可以知道：这段代码创建了一个ArrayList对象，并添加了三个整数元素。然后使用增强for循环遍历ArrayList中的元素，将每个元素打印到控制台上。&lt;/p&gt;
&lt;p&gt;  因此，最终的输出结果是：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-id=&quot;heading-6&quot;&gt;3. 迭代器遍历元素&lt;/h4&gt;
&lt;p&gt;  迭代器是一种用于遍历集合的接口，它提供了丰富的遍历和操作方法。在ArrayList中，我们可以通过迭代器来遍历元素并对其进行操作。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;ArrayList&amp;lt;Integer&amp;gt; list = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;ArrayList&lt;/span&gt;&amp;lt;&amp;gt;();
list.add(&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;);
list.add(&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;);
list.add(&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;);

Iterator&amp;lt;Integer&amp;gt; iterator = list.iterator();
&lt;span class=&quot;hljs-keyword&quot;&gt;while&lt;/span&gt; (iterator.hasNext()) {
    &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;element&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; iterator.next();
    System.out.println(element);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码解析：&lt;/strong&gt;  根据如上代码，我们可以知道：这段代码首先创建了一个名为list的ArrayList对象，该对象存储的是Integer类型的元素。然后向list中添加了三个元素：1、2和3。接下来，通过调用list的iterator()方法，获取到一个Iterator对象，该对象用于遍历list中的元素。Iterator是Java中的一种迭代器，可以用于遍历集合中的元素。然后，使用一个while循环来进行迭代操作。在循环中，我们通过调用Iterator的hasNext()方法来检查是否还有下一个元素。如果有，则调用Iterator的next()方法获取下一个元素，并将其赋值给一个名为element的int类型变量。然后，使用System.out.println()方法将element打印到控制台。&lt;/p&gt;
&lt;p&gt;  在这个例子中，循环会依次输出1、2和3，因为list中此时只有这三个元素。&lt;/p&gt;
&lt;p&gt;  综上所述，我们首先通过调用&lt;code&gt;list.iterator()&lt;/code&gt;方法获取ArrayList的迭代器对象，然后使用&lt;code&gt;iterator.hasNext()&lt;/code&gt;判断是否还有下一个元素，使用&lt;code&gt;iterator.next()&lt;/code&gt;获取下一个元素的值。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-7&quot;&gt;应用场景案例&lt;/h3&gt;
&lt;p&gt;  ArrayList元素的遍历技巧可以应用于各种场景。比如，在支付系统中，我们需要遍历用户的交易记录进行统计；在社交媒体应用中，我们需要遍历用户的关注列表来展示相关内容。通过掌握ArrayList元素的遍历技巧，可以更加高效地处理和分析大量数据。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-8&quot;&gt;优缺点分析&lt;/h3&gt;
&lt;p&gt;  不同的遍历方式有各自的优缺点。使用普通for循环遍历可以精确控制索引，进行元素的增删操作，但代码相对繁琐。增强for循环简洁易读，适用于只读取元素值的情况，但无法进行元素的增删操作。迭代器遍历可以在遍历过程中进行元素的增删操作，但相对而言略显复杂。根据具体需求，选择合适的遍历方式可以提高代码的效率和可读性。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-9&quot;&gt;类代码方法介绍&lt;/h3&gt;
&lt;h4 data-id=&quot;heading-10&quot;&gt;1. ArrayList.size()&lt;/h4&gt;
&lt;p&gt;该方法用于获取ArrayList中元素的个数。&lt;/p&gt;
&lt;h4 data-id=&quot;heading-11&quot;&gt;2. ArrayList.get(int index)&lt;/h4&gt;
&lt;p&gt;该方法用于获取指定索引位置的元素值。&lt;/p&gt;
&lt;h4 data-id=&quot;heading-12&quot;&gt;3. ArrayList.add(E element)&lt;/h4&gt;
&lt;p&gt;该方法用于向ArrayList中添加元素。&lt;/p&gt;
&lt;h4 data-id=&quot;heading-13&quot;&gt;4. Iterator.hasNext()&lt;/h4&gt;
&lt;p&gt;该方法用于判断迭代器是否还有下一个元素。&lt;/p&gt;
&lt;h4 data-id=&quot;heading-14&quot;&gt;5. Iterator.next()&lt;/h4&gt;
&lt;p&gt;该方法用于获取迭代器的下一个元素值。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-15&quot;&gt;Java代码测试用例&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;package&lt;/span&gt; com.example.javase.wf;

&lt;span class=&quot;hljs-keyword&quot;&gt;import&lt;/span&gt; java.util.ArrayList;
&lt;span class=&quot;hljs-keyword&quot;&gt;import&lt;/span&gt; java.util.Iterator;

&lt;span class=&quot;hljs-comment&quot;&gt;/**
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Author&lt;/span&gt; wf
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Date&lt;/span&gt; 2024-02-09 13:14
 */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;ArrayListDemo&lt;/span&gt; {
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(String[] args)&lt;/span&gt; {
        ArrayList&amp;lt;Integer&amp;gt; list = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;ArrayList&lt;/span&gt;&amp;lt;&amp;gt;();
        list.add(&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;);
        list.add(&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;);
        list.add(&lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;);

        &lt;span class=&quot;hljs-comment&quot;&gt;// 普通for循环遍历&lt;/span&gt;
        System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;普通for循环遍历：&quot;&lt;/span&gt;);
        &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; i &amp;lt; list.size(); i++) {
            &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;element&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; list.get(i);
            System.out.println(element);
        }

        &lt;span class=&quot;hljs-comment&quot;&gt;// 增强for循环遍历&lt;/span&gt;
        System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;增强for循环遍历：&quot;&lt;/span&gt;);
        &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; element : list) {
            System.out.println(element);
        }

        &lt;span class=&quot;hljs-comment&quot;&gt;// 迭代器遍历&lt;/span&gt;
        System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;迭代器遍历：&quot;&lt;/span&gt;);
        Iterator&amp;lt;Integer&amp;gt; iterator = list.iterator();
        &lt;span class=&quot;hljs-keyword&quot;&gt;while&lt;/span&gt; (iterator.hasNext()) {
            &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;element&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; iterator.next();
            System.out.println(element);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  运行以上测试用例，可以分别使用三种遍历方式遍历ArrayList的元素。&lt;/p&gt;
&lt;p&gt;  根据如上部分测试用例，本地执行结果如下，仅供参考：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/033e116a44b3413eb21fd269a57e4c9a~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1145&amp;amp;h=867&amp;amp;s=62295&amp;amp;e=png&amp;amp;b=2c2c2c&quot; alt=&quot;在这里插入图片描述&quot; loading=&quot;lazy&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;测试代码解析：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;  针对如上测试代码，这里我再具体给大家讲解下，希望能够更透彻的帮助大家理解：该代码演示了ArrayList的三种遍历方式：普通for循环、增强for循环和迭代器。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用普通for循环遍历：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通过&lt;code&gt;list.size()&lt;/code&gt;获取ArrayList的长度&lt;/li&gt;
&lt;li&gt;循环遍历列表，从索引0开始，到最后一个元素，每次迭代索引加1&lt;/li&gt;
&lt;li&gt;使用&lt;code&gt;list.get(i)&lt;/code&gt;获取指定索引的元素&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用增强for循环遍历：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;直接使用&lt;code&gt;for (int element : list)&lt;/code&gt;的语法格式进行遍历&lt;/li&gt;
&lt;li&gt;每次迭代将元素直接赋值给&lt;code&gt;element&lt;/code&gt;变量&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用迭代器遍历：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通过&lt;code&gt;list.iterator()&lt;/code&gt;获取ArrayList的迭代器&lt;/li&gt;
&lt;li&gt;使用&lt;code&gt;hasNext()&lt;/code&gt;方法检查是否还有下一个元素&lt;/li&gt;
&lt;li&gt;使用&lt;code&gt;next()&lt;/code&gt;方法获取下一个元素并将迭代器移到下一个位置&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;  以上三种遍历方式可以根据实际需求选择使用，它们都能遍历ArrayList中的元素并输出。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-16&quot;&gt;全文小结&lt;/h2&gt;
&lt;p&gt;  本文介绍了ArrayList元素的遍历技巧，在Java开发中经常会用到。我们通过具体的代码示例和解析，详细说明了普通for循环、增强for循环和迭代器三种常用遍历方式的特点和适用场景。同时，我们还提供了一些类代码方法介绍和具体的Java代码测试用例，帮助读者更好地理解和应用ArrayList元素的遍历技巧。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-17&quot;&gt;总结&lt;/h2&gt;
&lt;p&gt;  ArrayList是一种常用的动态数组，元素的遍历是我们经常需要用到的操作之一。本文从普通for循环、增强for循环和迭代器三种遍历方式入手，详细介绍了每种遍历方式的特点和适用场景。通过掌握ArrayList元素的遍历技巧，我们可以更加高效地处理和分析大量数据。希望本文对读者在Java开发中的ArrayList元素遍历有所帮助。&lt;/p&gt;
&lt;h1 data-id=&quot;heading-18&quot;&gt;最后&lt;/h1&gt;
&lt;p&gt;  大家如果觉得看了本文有帮助的话，麻烦给不熬夜崽崽点个&lt;strong&gt;三连&lt;/strong&gt;（点赞、收藏、关注）支持一下哈，大家的支持就是我写作的无限动力。&lt;/p&gt;&lt;/div&gt;文章源地址：&lt;a href=https://juejin.cn/post/7339809470321885195 rel=&quot;nofollow&quot; &gt;https://juejin.cn/post/7339809470321885195&lt;/a&gt;</description><pubDate>Tue, 27 Feb 2024 13:36:46 +0800</pubDate></item><item><title>2024程序员容器化上云之旅-第1集：跨越边界</title><link>http://lidehe.cn/post/141.html</link><description>&lt;div id=&quot;article-root&quot; itemprop=&quot;articleBody&quot; class=&quot;article-viewer markdown-body result&quot; data-v-2c6459d4=&quot;&quot;&gt;&lt;style&gt;.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:16px;overflow-x:hidden;color:#252933}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin-top:35px;margin-bottom:10px;padding-bottom:5px}.markdown-body h1{font-size:24px;line-height:38px;margin-bottom:5px}.markdown-body h2{font-size:22px;line-height:34px;padding-bottom:12px;border-bottom:1px solid #ececec}.markdown-body h3{font-size:20px;line-height:28px}.markdown-body h4{font-size:18px;line-height:26px}.markdown-body h5{font-size:17px;line-height:24px}.markdown-body h6{font-size:16px;line-height:24px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:100%}.markdown-body hr{border:none;border-top:1px solid #ddd;margin-top:32px;margin-bottom:32px}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background-color:#fff5f5;color:#ff502c;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75}.markdown-body pre&gt;code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#f8f8f8}.markdown-body a{text-decoration:none;color:#0269c8;border-bottom:1px solid #d1e9ff}.markdown-body a:active,.markdown-body a:hover{color:#275b8c}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f6f6f6}.markdown-body thead{background:#f6f6f6;color:#000;text-align:left}.markdown-body tr:nth-child(2n){background-color:#fcfcfc}.markdown-body td,.markdown-body th{padding:12px 7px;line-height:24px}.markdown-body td{min-width:120px}.markdown-body blockquote{color:#666;padding:1px 23px;margin:22px 0;border-left:4px solid #cbcbcb;background-color:#f8f8f8}.markdown-body blockquote:after{display:block;content:&quot;&quot;}.markdown-body blockquote&gt;p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol li,.markdown-body ul li{margin-bottom:0;list-style:inherit}.markdown-body ol li .task-list-item,.markdown-body ul li .task-list-item{list-style:none}.markdown-body ol li .task-list-item ol,.markdown-body ol li .task-list-item ul,.markdown-body ul li .task-list-item ol,.markdown-body ul li .task-list-item ul{margin-top:0}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:3px}.markdown-body ol li{padding-left:6px}.markdown-body .contains-task-list{padding-left:0}.markdown-body .task-list-item{list-style:none}@media (max-width:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}&lt;/style&gt;&lt;style data-highlight=&quot;&quot; data-highlight-key=&quot;juejin&quot;&gt;.markdown-body pre,.markdown-body pre&gt;code.hljs{color:#333;background:#f8f8f8}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}&lt;/style&gt;&lt;h1 data-id=&quot;heading-0&quot;&gt;故事梗概&lt;/h1&gt;
&lt;p&gt;Java程序员马意浓在互联网公司维护老旧电商后台系统。&lt;/p&gt;
&lt;p&gt;渴望学习新技术的他在工作中无缘Docker和K8s。&lt;/p&gt;
&lt;p&gt;他开始自学Vue3并使用SpringBoot3完成了一个前后端分离的Web应用系统，并打算将其用Docker容器化后用K8s上云。&lt;/p&gt;
&lt;h1 data-id=&quot;heading-1&quot;&gt;1 冒险召唤&lt;/h1&gt;
&lt;p&gt;【你去Causium了？】&lt;/p&gt;
&lt;p&gt;【嗯。上周去的。】&lt;/p&gt;
&lt;p&gt;【恭喜！🎉🎉🎉】&lt;/p&gt;
&lt;p&gt;Java程序员马意浓在微信中祝贺了前同事全绽园后，心里如&lt;strong&gt;打翻了五味瓶&lt;/strong&gt;，百味杂陈。&lt;/p&gt;
&lt;p&gt;一年多前，马意浓和全绽园在同一家公司的同一个组里一起编写Java代码。&lt;/p&gt;
&lt;p&gt;后来，马意浓跳槽去了现在的这家国内互联网公司。&lt;/p&gt;
&lt;p&gt;过了一阵，他在朋友圈看到全绽园分享的云原生相关技术文章，并且发现全绽园还在一个云原生编程训练营当主讲老师。&lt;/p&gt;
&lt;p&gt;马意浓花了一些钱，报名参加了这个训练营。&lt;/p&gt;
&lt;p&gt;但是由于每天加班到很晚，他只听了训练营的开头几节课就没能继续了。&lt;/p&gt;
&lt;p&gt;昨天，他在朋友圈看到全绽园发布的Causium公司招聘微服务软件工程师的信息，于是就有了上面的微信对话。&lt;/p&gt;
&lt;p&gt;Causium是几年前成立的一家主推开源平台和云服务产品的外企。&lt;/p&gt;
&lt;p&gt;这家云服务软件公司是新成立的。这意味着程序员使用的技术栈都是最新的。&lt;/p&gt;
&lt;p&gt;马意浓看着墙上贴着他名字的任务卡，不禁叹了口气。&lt;/p&gt;
&lt;p&gt;他已经在这家互联网公司工作了一年多。他的职责是维护公司的一套老旧Java电商后台系统。&lt;/p&gt;
&lt;p&gt;维护老旧系统意味着他每天都要面对诗山系统中的众多bug。&lt;/p&gt;
&lt;p&gt;他所使用的技术栈还是10年前的那一套，比如JDK6、JSP、Maven和Ant。&lt;/p&gt;
&lt;p&gt;他只能在技术文章中看看最近几年兴起的Docker容器化和K8s上云的技能，过过眼瘾。&lt;/p&gt;
&lt;p&gt;看到下面两个论断，他心头一紧。&lt;/p&gt;
&lt;p&gt;🔥&lt;strong&gt;Docker是云原生应用的基础和构建块。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;🔥&lt;strong&gt;Kubernetes/K8s是云计算的操作系统。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;但在工作中，他却没有任何机会体验这两门&lt;strong&gt;代表云计算的新技术&lt;/strong&gt;。如图1。&lt;/p&gt;
&lt;p&gt;他几乎&lt;strong&gt;每天都会更新&lt;/strong&gt;自己的Windows 11操作系统。&lt;/p&gt;
&lt;p&gt;然而，考虑到自己所掌握的&lt;strong&gt;技术慢慢过时&lt;/strong&gt;，他认为&lt;strong&gt;程序员的技能升级不能再拖了&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d6ffb004fded4d6cbc1713f65b1155f5~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1024&amp;amp;h=1024&amp;amp;s=2002665&amp;amp;e=png&amp;amp;b=052822&quot; alt=&quot;f-01.png&quot; loading=&quot;lazy&quot;&gt;
图1 马意浓在工作中没有任何机会体验Docker容器化和K8s上云这两门代表云计算的新技术&lt;/p&gt;
&lt;h2 data-id=&quot;heading-2&quot;&gt;1.1 Docker容器化和K8s上云能解决程序员三大痛点&lt;/h2&gt;
&lt;p&gt;基于所阅读的材料，他总结了Docker容器化和K8s上云，能解决程序员三大痛点。&lt;/p&gt;
&lt;p&gt;❌&lt;strong&gt;第一，“在我这运行得好好的。怎么在你那不行？”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这是马意浓在看到测试人员给自己开了一个bug后经常说的话。&lt;/p&gt;
&lt;p&gt;这个问题，在很大程度上是因为依赖库在不同环境下存在差异所导致的。&lt;/p&gt;
&lt;p&gt;✅他了解到，docker image能&lt;strong&gt;将代码的所有依赖库都打包到一起&lt;/strong&gt;，并能让代码在容器中独立运行。&lt;/p&gt;
&lt;p&gt;这样就能实现&lt;strong&gt;在测试环境中所测试的image，就是在生产环境所部署的&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这样就能解决因为依赖库在不同环境下的差异，而导致这里能运行，而那里不能运行的问题。&lt;/p&gt;
&lt;p&gt;❌&lt;strong&gt;第二，“这是谁改了配置又不告诉大家？”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这是马意浓、测试人员和运维人员，在发现Bug是由错误配置所导致时，经常说的一句话。&lt;/p&gt;
&lt;p&gt;✅他了解到，Docker和K8s都强调基础设施即代码，即配置不是靠做软件的人拍脑袋临时手工敲的。&lt;/p&gt;
&lt;p&gt;而是靠&lt;strong&gt;写成与代码同等地位的配置文件&lt;/strong&gt;，通过团队代码评审，保存到版本库中，并让机器执行。&lt;/p&gt;
&lt;p&gt;这样能让配置的更改广而告之，&lt;strong&gt;配置的执行有据可查&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;同时也便于让机器读取，自动执行，而无须手工一遍一遍敲同样的命令。&lt;/p&gt;
&lt;p&gt;❌&lt;strong&gt;第三，“测试环境太少得排队等很久才能使用。”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这是马意浓在修改了代码并需要在测试环境上验证时，经常说的一句话。&lt;/p&gt;
&lt;p&gt;✅他了解到，有了本地docker compose，他就可以利用其&lt;strong&gt;占用存储空间小，运行速度快&lt;/strong&gt;的特点，在本地电脑以docker image的方式，&lt;strong&gt;最大限度模拟生产环境&lt;/strong&gt;，测试要发布的软件。&lt;/p&gt;
&lt;p&gt;这样就无须排队等公司共享的测试环境。这样能让他更早地发现bug，减少因很晚才发现Bug所导致的大量返工时间。&lt;/p&gt;
&lt;p&gt;同样，在企业内部如果使用了K8s云集群的，那么就能利用云的&lt;strong&gt;多租户&lt;/strong&gt;特点，快速为需要测试环境的程序员和测试人员，分配测试环境，从而解决测试环境少的问题。&lt;/p&gt;
&lt;p&gt;马意浓很想自学Docker容器化和K8s上云这些新技术，但苦于没人指导。&lt;/p&gt;
&lt;p&gt;最近，能帮助程序员学习写代码的AIGC横空出世。&lt;/p&gt;
&lt;p&gt;这让他看到了自学Docker容器化和K8s上云新技术的曙光。&lt;/p&gt;
&lt;h1 data-id=&quot;heading-3&quot;&gt;2 跨越边界&lt;/h1&gt;
&lt;p&gt;作为Java后端程序员的马意浓，花了半个月的业余时间，跟着一个讲经典的todo list项目的视频，自学了vue3。&lt;/p&gt;
&lt;p&gt;然后，他再配合使用SpringBoot3，完成了一个前后端分离的web应用系统。&lt;/p&gt;
&lt;p&gt;他打算将这个Web应用系统，用docker容器化后，再用K8s上云。&lt;/p&gt;
&lt;p&gt;这样就能让自己提升这两方面的技能。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-4&quot;&gt;2.1 选择编程练习Shopping List Web App的原因&lt;/h2&gt;
&lt;p&gt;马意浓在学Vue3时，所做的那个todo list前端app项目，其实是一个网页版的有增删改查的待办列表。&lt;/p&gt;
&lt;p&gt;为了让自己能够完整地练习一遍所学的知识，他就把需求从待办列表，改成了购物清单。&lt;/p&gt;
&lt;p&gt;他还给这个Web应用起了个名字：Shopping List Web App。&lt;/p&gt;
&lt;p&gt;这个Web应用，能代表前后端分离的Web应用的典型架构。&lt;/p&gt;
&lt;p&gt;这个架构能表现最小化的云原生微服务之间的依赖关系。&lt;/p&gt;
&lt;p&gt;比如前端微服务app依赖后端微服务app。而后端微服务app又依赖于数据库微服务app。&lt;/p&gt;
&lt;p&gt;这便于学习如何使用新兴的故障注入实验工具，进行混沌工程实践。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-5&quot;&gt;2.2 Shopping List Web App需求描述&lt;/h2&gt;
&lt;p&gt;当想到这个Web应用的需求描述时，马意浓脑海中出现了下面的场景。&lt;/p&gt;
&lt;p&gt;一天，他发现家里的瓶装水快没了，就想着晚上下班路过超市时，顺便买几瓶。&lt;/p&gt;
&lt;p&gt;但这时老板来微信喊他开会。他很快就把买瓶装水的事情忘掉干干净净。&lt;/p&gt;
&lt;p&gt;等下班路过超市，他光顾着给老婆买打折的巧克力。等到家要喝水了，发现水没买。&lt;/p&gt;
&lt;p&gt;这个Shopping List Web App，就能为他解决上面的痛点。&lt;/p&gt;
&lt;p&gt;当他想要买水时，就可以马上在app里添加一条买水的购物项。&lt;/p&gt;
&lt;p&gt;过了一会儿又想买点香蕉，那就再加一条。&lt;/p&gt;
&lt;p&gt;等他到了超市，再查看一下这个清单，要买的东西就不会忘了。如图2。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1edbe455a1ea4abaaa2afef70964e49f~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1002&amp;amp;h=1130&amp;amp;s=231813&amp;amp;e=png&amp;amp;b=fdfdfd&quot; alt=&quot;f-02.png&quot; loading=&quot;lazy&quot;&gt;
图2 Shopping List Web App前端app界面&lt;/p&gt;
&lt;h2 data-id=&quot;heading-6&quot;&gt;2.3 容器化与上云之旅的三步走&lt;/h2&gt;
&lt;p&gt;在跟着Todo List视频自学了vue3后，为了掌握Docker容器化和K8s上云，马意浓需要学习这两门技术。&lt;/p&gt;
&lt;p&gt;他喜欢看英文资料。因为内容比较新。&lt;/p&gt;
&lt;p&gt;他在亚马逊购物网站上，用关键词docker和k8s搜了一下书。对比了一下评分。查看了一下读者评论。&lt;/p&gt;
&lt;p&gt;最后，他发现Nigel Poulton所著的下面三本书，是2023年市面上讲这两门技术口碑最好的书。&lt;/p&gt;
&lt;p&gt;📙Docker Deep Dive (2023 Edition)&lt;/p&gt;
&lt;p&gt;📙Quick Start Kubernetes (2023 Edition)&lt;/p&gt;
&lt;p&gt;📙The Kubernetes Book (2023 Edition)&lt;/p&gt;
&lt;p&gt;他花了1个月时间，读了这3本书，运行了书中的命令，并做了笔记。&lt;/p&gt;
&lt;p&gt;有了这些准备，他觉得可以开启前后端分离Web应用Docker容器化与Kubernetes/K8s上云之旅了。&lt;/p&gt;
&lt;p&gt;这个旅程，该如何开启呢？&lt;/p&gt;
&lt;p&gt;他觉得可以分三步走。&lt;/p&gt;
&lt;p&gt;🦶&lt;strong&gt;第一步，在本地Gradle/npm开发环境里成功运行Web应用。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;🦶&lt;strong&gt;第二步，在本地Docker Compose里成功运行Web应用。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;🦶&lt;strong&gt;第三步，在K8s云集群里成功运行Web应用。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;❓Docker Container与Docker Compose有什么区别呢？&lt;/p&gt;
&lt;p&gt;马意浓从书中了解到下面区别。&lt;/p&gt;
&lt;p&gt;✅前者是后者的构建块。&lt;/p&gt;
&lt;p&gt;✅就使用场景来说，前者供程序员在本地电脑进行单容器/微服务的开发、构建和测试。而后者则在本地电脑进行多容器/微服务的开发、构建和测试。&lt;/p&gt;
&lt;p&gt;✅就目的来说，前者将所开发的微服务通过容器轻松运行在本地电脑上，以便程序员在开发时自测，并在自测通过后直接将其用于后续的生产发布和运行。&lt;/p&gt;
&lt;p&gt;而后者以基础设施即代码的方式，用一个声明性的docker-compose.yml文件，描述一个应用系统所包含的多个微服务所对应的多个容器，以便自动化地构建、发布和运行应用系统。&lt;/p&gt;
&lt;p&gt;✅就配置文件来说，前者使用&lt;code&gt;Dockerfile&lt;/code&gt;，而后者使用&lt;code&gt;docker-compose.yml&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;✅就关注点来说，前者关注基础镜像、依赖环境、源代码和运行命令。而后者关注容器、service和 volume。&lt;/p&gt;
&lt;p&gt;✅就差异点来说，前者只关注某个镜像及其容器，而不考虑与其他容器之间的访问。而后者可根据docker-compose.yml文件中的声明，使用Dockerfile构建镜像。&lt;/p&gt;
&lt;p&gt;✅就部署来说，两者有一个共同点，就是1个容器只部署1个微服务，每个微服务都只运行在1个容器上。&lt;/p&gt;
&lt;p&gt;马意浓也曾打算一次就把源代码直接部署到K8s云集群里。&lt;/p&gt;
&lt;p&gt;但这样做的前提，是一旦部署上去后，将来再也没有新需求或修bug，而去修改源代码并重新部署。&lt;/p&gt;
&lt;p&gt;对于马意浓这个Docker和K8s新手来说，他觉得不可行。&lt;/p&gt;
&lt;p&gt;他敏锐地意识到，当新需求来了或要修bug时，应该知道如何把修改过的代码，在&lt;strong&gt;本地Gradle/npm开发环境&lt;/strong&gt;里调试通。也就是进行&lt;strong&gt;第一轮自测&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;毕竟，本地电脑是他的地盘。在本地电脑上调试程序，总比在K8s云集群里要方便得多。这是第一步的意义。&lt;/p&gt;
&lt;p&gt;之后，他需要知道如何将通过了第一轮自测的代码，构建成docker image，并在&lt;strong&gt;本地docker compose&lt;/strong&gt;里成功运行，为之后将docker image部署到K8s做&lt;strong&gt;第二轮自测&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;毕竟，本地docker compose也在他的地盘上。这是第二步的意义。&lt;/p&gt;
&lt;p&gt;最后，他需要知道如何将通过了第二轮自测的docker image，部署到&lt;strong&gt;K8s云集群&lt;/strong&gt;并成功运行，为之后部署到生产环境的K8s云集群做&lt;strong&gt;第三轮自测&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;马意浓通过上网搜索，了解到目前市面上主流的K8s云集群，按照面世的先后顺序，有以下三种。&lt;/p&gt;
&lt;p&gt;🔥谷歌的Google Kubernetes Engine (GKE)，2014年面世&lt;/p&gt;
&lt;p&gt;🔥微软的Azure Kubernetes Service (AKS)，2017年面世&lt;/p&gt;
&lt;p&gt;🔥亚马逊的Amazon Elastic Kubernetes Service (EKS)，2018年面世&lt;/p&gt;
&lt;p&gt;他从易访问的角度考虑了一下，决定选用微软的Azure K8s Service。可以免费使用1个月。&lt;/p&gt;
&lt;p&gt;这也算是他的地盘。在这里自测，会比在运维团队地盘里的生产K8s云集群环境，要方便多了。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-7&quot;&gt;2.4 在本地Gradle/npm开发环境中的软件架构&lt;/h2&gt;
&lt;p&gt;马意浓是个做事严谨的人。&lt;/p&gt;
&lt;p&gt;他在运行这个Web应用之前，用C4 Model画出了Shopping List Web App在本地Gradle/npm开发环境里运行时的架构。如图3和图4。&lt;/p&gt;
&lt;p&gt;图3是站在整个Web应用的边界，向外看的context图。&lt;/p&gt;
&lt;p&gt;在系统外，有User和Admin这两种用户在使用系统。&lt;/p&gt;
&lt;p&gt;User使用系统来管理购物清单。Admin使用系统来管理购物清单数据。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/55840b0e768d435b9c284832860b9d6f~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=768&amp;amp;h=549&amp;amp;s=41827&amp;amp;e=png&amp;amp;b=ffffff&quot; alt=&quot;f-03.png&quot; loading=&quot;lazy&quot;&gt;
图3 Shopping list web app在本地Gradle/npm开发环境里的的context架构图&lt;/p&gt;
&lt;p&gt;图4是站在整个web app的边界，向内看的container图。&lt;/p&gt;
&lt;p&gt;在系统内，有4个container。&lt;/p&gt;
&lt;p&gt;马意浓提醒自己，c4 model里的container的概念，和docker的container的概念，是不同的。&lt;/p&gt;
&lt;p&gt;前者是代表架构图中运行的应用或数据存储系统，后者代表封装了所有代码和依赖库能独立运行的软件运行单元。&lt;/p&gt;
&lt;p&gt;User通过前端shopping-list-front-end来查看和修改购物清单。&lt;/p&gt;
&lt;p&gt;而前端shopping-list-front-end将用户对购物清单的操作请求，发给后端shopping-list-api。&lt;/p&gt;
&lt;p&gt;后端shopping-list-api再访问数据库postgres查询和更新数据。&lt;/p&gt;
&lt;p&gt;Admin通过使用pgadmin数据库管理工具来直接管理postgres数据库中的数据。&lt;/p&gt;
&lt;p&gt;马意浓从阅读Docker Deep Dive那本书里得知，数据库及其管理工具，可以使用docker compose直接拉取docker image并运行相应的docker容器来安装，而无需大费周章地下载安装包来安装。&lt;/p&gt;
&lt;p&gt;这样做，除了方便安装，还能方便卸载和切换不同的版本。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/276112c980834ecba5432e3b65ab1dd2~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=742&amp;amp;h=1142&amp;amp;s=92218&amp;amp;e=png&amp;amp;b=ffffff&quot; alt=&quot;f-04.png&quot; loading=&quot;lazy&quot;&gt;
图4 Shopping list web app在本地Gradle/npm开发环境里的container架构图&lt;/p&gt;
&lt;p&gt;🔥【&lt;strong&gt;未完待续&lt;/strong&gt;】&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;❤️欲读系列故事的全集内容，可搜用户“程序员吾真本”，找到“2024程序员容器化上云之旅”专栏阅读。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;🔥&lt;strong&gt;后面连载内容大纲先睹为快&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;🔥&lt;strong&gt;3 挑选工具&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3.1 使用包管理器安装git以方便版本切换和升级以及下载代码&lt;/p&gt;
&lt;p&gt;3.2 源代码介绍&lt;/p&gt;
&lt;p&gt;3.3 使用包管理器安装jdk以方便版本切换和升级以及在本地进行后端app构建&lt;/p&gt;
&lt;p&gt;3.4 使用包管理器安装node.js和npm以方便版本切换和升级以及在本地进行前端app构建&lt;/p&gt;
&lt;p&gt;🔥&lt;strong&gt;4 接近深洞&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;4.1 使用docker desktop以容器方式运行数据库及其管理工具以便简化数据库安装步骤&lt;/p&gt;
&lt;p&gt;4.2 在本地Gradle/npm开发环境启动后端app&lt;/p&gt;
&lt;p&gt;4.3 在本地Gradle/npm开发环境启动前端app&lt;/p&gt;
&lt;p&gt;🔥&lt;strong&gt;5 历经磨难&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5.1 在用本地Gradle/npm开发环境自测时面临前端无法访问后端的CORS问题的挑战&lt;/p&gt;
&lt;p&gt;5.2 清理现场&lt;/p&gt;
&lt;p&gt;🔥&lt;strong&gt;6 夺取宝剑&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;6.1 在本地docker compose里的软件架构&lt;/p&gt;
&lt;p&gt;6.2 免费注册Docker hub账号以便推送docker image为部署k8s做准备&lt;/p&gt;
&lt;p&gt;6.3 构建后端docker image并推送到docker hub&lt;/p&gt;
&lt;p&gt;6.4 构建前端docker image并推送到docker hub&lt;/p&gt;
&lt;p&gt;6.5 在本地docker compose里运行shopping list web app&lt;/p&gt;
&lt;p&gt;6.6 清理现场&lt;/p&gt;
&lt;p&gt;🔥&lt;strong&gt;7 上云之路&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;7.1 注册Azure k8s service云平台账号&lt;/p&gt;
&lt;p&gt;7.2 打开docker desktop kubernetes让kubectl能正常工作&lt;/p&gt;
&lt;p&gt;🔥&lt;strong&gt;8 复活重生&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;8.1 在k8s云集群中运行shopping list web app时如何配置前端app在k8s云集群中的对外域名和端口号以解决CORS问题&lt;/p&gt;
&lt;p&gt;8.2 在全绽园的帮助下为前端app配置ingress后解决了这个问题&lt;/p&gt;
&lt;p&gt;8.3 在k8s云集群中的软件架构&lt;/p&gt;
&lt;p&gt;8.4 如何新增k8s的deployment、service和ingress的配置文件，以便使用kubectl命令将ingress和postgres、shopping-list-api和shopping-list-front-end这3个微服务部署到k8s上&lt;/p&gt;
&lt;p&gt;8.5 构建后端docker image并推送到docker hub&lt;/p&gt;
&lt;p&gt;8.6 构建前端docker image并推送到docker hub&lt;/p&gt;
&lt;p&gt;8.7 在k8s云集群上配置postgres、shopping-list-api和shopping-list-front-end三个微服务和ingress并运行&lt;/p&gt;
&lt;p&gt;8.8 清理现场&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🔥9 取经归来&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当最终把前后端分离的web应用成功部署到azure k8s云集群上，并能顺利使用后，马意浓把整个容器化和上云之旅，写成系列文章，分享给其他程序员。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;😃你能否跟着马意浓&lt;strong&gt;一步步做下来&lt;/strong&gt;？在阅读中&lt;strong&gt;有任何疑问&lt;/strong&gt;，欢迎在留言区留言。我会&lt;strong&gt;一一回复&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;❤️如果喜欢本文，那么&lt;strong&gt;点赞&lt;/strong&gt;和&lt;strong&gt;留言&lt;/strong&gt;，并&lt;strong&gt;转发&lt;/strong&gt;给身边有需要的朋友，就是&lt;strong&gt;对我的最大支持&lt;/strong&gt;😃🤝🙏。&lt;/p&gt;&lt;/div&gt;文章源地址：&lt;a href=https://juejin.cn/post/7339810287750643749 rel=&quot;nofollow&quot; &gt;https://juejin.cn/post/7339810287750643749&lt;/a&gt;</description><pubDate>Tue, 27 Feb 2024 13:36:44 +0800</pubDate></item><item><title>越界不再困扰：数组越界问题的解决方案</title><link>http://lidehe.cn/post/140.html</link><description>&lt;div id=&quot;article-root&quot; itemprop=&quot;articleBody&quot; class=&quot;article-viewer markdown-body result&quot; data-v-2c6459d4=&quot;&quot;&gt;&lt;style&gt;.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin:30px 0 10px;color:#cca152;position:relative;padding-left:50px;border-bottom:2px solid rgba(209,163,78,.6);padding-bottom:0}.markdown-body h1{font-size:30px}.markdown-body h1:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:80%;bottom:-10px;left:-2px}.markdown-body h2{font-size:24px}.markdown-body h2:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:70%;bottom:-15px;left:-1px}.markdown-body h3{font-size:18px}.markdown-body h3:before{content:&quot;&quot;;width:50px;height:42px;display:block;position:absolute;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAhBAMAAACo1K8bAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAnUExURUdwTMyhUsqkUMyhUsyiUcyhUsyhUsyhUcyhUsyhUs2hUtytWNWoVX44si8AAAAKdFJOUwD8Bfcge95QncCWSSDAAAABh0lEQVQoz2WSPUvDQBjHjyPSOB7drh2OUOs36NA6pKAFwaEo4tDFIUWxGYLgKw4BEYUuHaQg7XJ0kccsUmrT2qUUQZp8KO/y1hSfIYEf/5eHu0MoGU1+sIbSw5Bypd92S+dWWrd34b15vuOPY4QxuvtYZp0lIVk3Zgjt+5zkh12AvBHnbW85BOjXySPwhc5CYcY0OdDh5dEUqIEj4cN8Dty3a1MqYJS4MaWU5wzVLwMMxqGSNQgA/VFa4gf50yhxSUW+db8ACa2gBxfnABVDFYHCPYrc7TLwCepJM8/ZoVsRwpxdHEozHUXd6idwVzFFM5BFmIhQVQjrNdnCvdd48wblI2VHtsAZioSsTYVwLoXvjMXH1icuNgPhQE+Ot1+xi8HeA3d1Df1f1JPVUOmsYLujBjuSySqSXYt+yTwbJ0pcyIhqTrxkn0BazRLizJosxRBued+z0jPD6VewOXl5utHRGmMNK3k0iTkzxpq2/oIQO6gLprF12kT/R20eyzlcg7iwK0dPsz/ibpdsCHweWwAAAABJRU5ErkJggg==) 0 0 no-repeat;background-size:60%;bottom:-19px;left:-2px}.markdown-body h4{font-size:16px;padding-left:0;border-bottom:1px solid rgba(209,163,78,.6)}.markdown-body h5{font-size:15px;padding-left:0}.markdown-body em{color:#cca152}.markdown-body del{text-decoration-color:#cca152;text-decoration-thickness:2px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:80%;margin:6px auto;box-shadow:0 6px 15px #8e8e8e;display:block;margin:20px auto!important;object-fit:contain;border-radius:8px}.markdown-body hr{border:none;border-top:2px solid #e0c9a1;margin-top:32px 0}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background:#f6efde;color:#b69454;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Mono,Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75;background:#fef6e1;border-radius:4px;box-shadow:0 0 8px hsla(0,0%,47%,.45)}.markdown-body pre:before{content:&quot;&quot;;display:block;height:30px;width:100%;margin-bottom:-7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAOCAMAAABaWb9VAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAFZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkzCJ1kAAAAJcEhZcwAADsQAAA7EAZUrDhsAAACHUExURUdwTMxCKdc8NvdYT/9hVyLJPABBAGubKNiIOv+/K+ytJBakH9aZG+5QR5VZDOBDPhmtJ8+VGuGjH/CwJR26MR6+NBq0LPW1KBmwKetNRfJUTONHP92fHuSmIeFEPhu3LR29M/BTS+mqIuqsI5qdHyLKPP++Kv9gVf9lW//KLSXXQCTQP//FLMVm5KQAAAAldFJOUwAlPPz7+woBBPu8Mzu+FlRRKmvnweeG+Wqg6mVNXmuc1OCbmjZJWF/9AAABKklEQVQoz3WS6XaCMBCFRzAM++KGsqhtDwES3//5OtmA2uP9A9zwzRoAgBC0QgQrdA68OZsDr229YGHoIEj7Pl0ZOgjKa5lYJ4Rd1vijn3nuD4Qurjmv48o6RFyfbGDnS6DeEXZfk5ZfuBhdPb9I87ECNMh1EFJKIU6agWzaa01NbmLkxznSmmObJBkkUxrERf3i+ftRiZi7ShPCYY64UhTx1AR5CDYoMXkOKEY7GmTcTzeD/FiER68DfSLgSRqEIBoB3P8h3x8RZhBXGJGusJdD6rfCBl0YqvZNkrV9zej2cWlfJWG6fRpyM41qYH+GTPPi2yFLQYC0Qybm5o96lW77kMbcrBKtgeWTsthVamNXFF4I6x0DTPuugsVRFyYpyxzWqNvHJwed8ws7QyP1UwjNjwAAAABJRU5ErkJggg==) 10px 10px no-repeat;background-size:40px}.markdown-body pre&gt;code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#fef6e1}.markdown-body a{text-decoration:none;color:#d8ac5a;border-bottom:1px solid #d8ac5a}.markdown-body a:active,.markdown-body a:hover{color:#93753f;border-color:#93753f}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f4e8c7;border-collapse:collapse}.markdown-body thead{background:rgba(255,227,176,.6588235294);text-align:left;display:table-header-group;border-bottom:1px solid rgba(255,227,176,.6588235294)}.markdown-body tbody{background:rgba(255,247,229,.3882352941)}.markdown-body td,.markdown-body th{padding:7px;line-height:24px;min-width:100px}.markdown-body blockquote{color:#bd954f;padding:1px 23px;margin:22px 0;border-left:4px solid #dcb267;background-color:#fff7e5}.markdown-body blockquote:after{display:block;content:&quot;&quot;}.markdown-body blockquote&gt;p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol .task-list-item,.markdown-body ul .task-list-item{list-style:none}.markdown-body ol li{padding-left:6px}.markdown-body::marker{color:#dcb267}.markdown-body .contains-task-list{padding-left:0}.markdown-body .contains-task-list .task-list-item{list-style:none;position:relative}.markdown-body .contains-task-list .task-list-item input[type=checkbox]{position:relative;top:2px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:before{content:&quot;&quot;;display:inline-block;height:12px;width:12px;position:absolute;left:-2px;top:-2px;border:2px solid #cda152;border-radius:5px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:checked{position:relative;top:2px}.markdown-body .contains-task-list .task-list-item input[type=checkbox]:checked:before{border:none;content:&quot;&quot;;display:inline-block;height:17px;width:17px;position:absolute;left:-2px;top:-2px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAAAXNSR0IArs4c6QAAAYhJREFUOBFjYACC0/MDGsDEiyvr/zOCeUwMJxn/A8HZRUEMYBFGJsZ6kFoQYALiAyAGCgDpA+sFijKeWRj4H1kWpIWBW1SDQcm+BCzOAiK/vr7BcO/gDbAAI4hE1waWgRBnmWCGIwkyKFjnwow0BhsJk9QLncvw5dV1oPE9MCEGmBWrgCKhcFEowyR+PSNYwemFAZ4M/xjMkRWYJm5oAPFB/joDpI1BHHQANgGPDxj+//vfCA4IdJ3GcevgQnAFhlHLwYIgSVA0wABcwY3tFQzokiBFGIEP0wmigW5wZAK5FFkQib0a6NUDcEmgb7AGFpIGZOZqoMFhIAFQknEAJpn9yLLEssFOBCp2IFaDkl0xg6C8FbJyB3gowUS5RdQYBORQYpVB1iwVHIIMwJh///AYTCmYRklNIBFmNi4GeYt0BhnjeIa3dw8wSBlEgDUhxw2yCRgGfHp2geHiqiSwUwUVrFAiFVkjjA1LrjgTHEwhFvosMCZM4NEIUoAtWWNoBGZ70/gN22HiAD2uhAzsYNBZAAAAAElFTkSuQmCC) 0 0 no-repeat;background-size:100%}@media (max-width:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}&lt;/style&gt;&lt;style data-highlight=&quot;&quot; data-highlight-key=&quot;androidstudio&quot;&gt;.markdown-body pre,.markdown-body pre&gt;code.hljs{color:#a9b7c6;background:#282b2e}.hljs-bullet,.hljs-literal,.hljs-number,.hljs-symbol{color:#6897bb}.hljs-deletion,.hljs-keyword,.hljs-selector-tag{color:#cc7832}.hljs-link,.hljs-template-variable,.hljs-variable{color:#629755}.hljs-comment,.hljs-quote{color:grey}.hljs-meta{color:#bbb529}.hljs-addition,.hljs-attribute,.hljs-string{color:#6a8759}.hljs-section,.hljs-title,.hljs-type{color:#ffc66d}.hljs-name,.hljs-selector-class,.hljs-selector-id{color:#e8bf6a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}&lt;/style&gt;&lt;blockquote&gt;
&lt;p&gt;  &lt;a href=&quot;https://juejin.cn/column/7271287156571389991&quot; target=&quot;_blank&quot; title=&quot;https://juejin.cn/column/7271287156571389991&quot;&gt;《Java零基础教学》&lt;/a&gt;是一套深入浅出的 Java 编程入门教程。全套教程从Java基础语法开始，适合初学者快速入门，同时也从实例的角度进行了深入浅出的讲解，让初学者能够更好地理解Java编程思想和应用。&lt;/p&gt;
&lt;p&gt;  本教程内容包括数据类型与运算、流程控制、数组、函数、面向对象基础、字符串、集合、异常处理、IO 流及多线程等 Java 编程基础知识，并提供丰富的实例和练习，帮助读者巩固所学知识。本教程不仅适合初学者学习，也适合已经掌握一定 Java 基础的读者进行查漏补缺。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;  为了应某一读者的邀请，此次我特地梳理了一期以Java之数组系列，给新手小白或者初级者入门级零基础学习，加上完整且系统性的学习，希望能帮助到有需要的伙伴们，如下为这期学习内容的章节小结。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数组的基本概念&lt;/li&gt;
&lt;li&gt;数组的声明和初始化&lt;/li&gt;
&lt;li&gt;数组的访问和操作&lt;/li&gt;
&lt;li&gt;多维数组&lt;/li&gt;
&lt;li&gt;数组的排序和搜索&lt;/li&gt;
&lt;li&gt;动态数组和ArrayList&lt;/li&gt;
&lt;li&gt;数组的常见问题和解决方案&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  如上数组篇之小章节内容涵盖了Java数组的基本概念、声明、初始化、访问、操作、多维数组、排序、搜索、动态数组和常见问题解决方案等内容。通过系统学习这些章节，你将全面理解和掌握Java中数组的使用和相关技巧。你也可以根据需要自行调整章节的顺序或添加其他相关主题。&lt;/p&gt;
&lt;p&gt;  如果有任何写的不详细不具体或者有疑惑的地方，还请评论区积极告知于我，共同探讨，学习是相互的，一起学习，一起进步！如果特地需要找如上几期中某一期的内容，大家可以从主页中翻找，都归纳于一个系统，这里就不梳理特殊入口；至此如果还想我写其他系列学习教学，也可以私信或者评论区留言，我会第一时间给予回复便抽时间积极去响应。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-0&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;  在开发过程中，数组越界是一个常见的错误，可能导致程序崩溃或产生意想不到的结果。本文将介绍如何解决数组越界问题，避免潜在的错误和风险。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-1&quot;&gt;摘要&lt;/h2&gt;
&lt;p&gt;  本文旨在提供解决数组越界问题的实用方案和技巧。通过Java开发语言为例，介绍在数组操作中如何避免越界错误，并通过具体的代码示例演示解决方案的实现过程。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-2&quot;&gt;简介&lt;/h2&gt;
&lt;p&gt;  数组是一种用于存储和组织数据的重要数据结构。在Java中，数组的索引是从 0 开始的整数，这就意味着访问数组时需要小心处理边界情况，否则可能导致数组越界错误。本节将介绍数组越界问题的原因和影响。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-3&quot;&gt;源代码解析&lt;/h2&gt;
&lt;p&gt;  在Java中，处理数组越界问题有多种方法和技巧，我们将一一讲解它们。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-4&quot;&gt;方法一：索引范围检查&lt;/h3&gt;
&lt;p&gt;  为了避免数组越界错误，我们可以在访问数组之前检查索引范围是否有效。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;elementAccess&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr, &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; index)&lt;/span&gt; {
    &lt;span class=&quot;hljs-comment&quot;&gt;// 检查索引范围&lt;/span&gt;
    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (index &amp;gt;= &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt; &amp;amp;&amp;amp; index &amp;lt; arr.length) {
        &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;element&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; arr[index];
        System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;数组元素为：&quot;&lt;/span&gt; + element);
    } &lt;span class=&quot;hljs-keyword&quot;&gt;else&lt;/span&gt; {
        System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;索引超出范围！&quot;&lt;/span&gt;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码解析：&lt;/strong&gt;  根据如上代码，我们可以知道：这段代码实现了根据索引获取数组元素的功能。方法名为elementAccess，接收两个参数：一个是整型数组arr，另一个是要访问的元素的索引index。首先，代码检查了索引的范围。通过 if 语句判断条件 index &amp;gt;= 0 &amp;amp;&amp;amp; index &amp;lt; arr.length，如果索引在合法范围内，则执行 if 语句块中的代码。在 if 语句块中，通过 int element = arr[index] 将索引所指向的元素赋值给变量 element。然后，使用 System.out.println 方法打印出 &quot;数组元素为：&quot; + element。如果索引超出了合法范围，则执行 else 语句块中的代码，打印出 &quot;索引超出范围！&quot;。&lt;/p&gt;
&lt;p&gt;  总结来说，这段代码通过判断索引的范围，实现了从数组中取出指定索引的元素，并将其打印出来的功能。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-5&quot;&gt;方法二：循环遍历时的边界控制&lt;/h3&gt;
&lt;p&gt;  在使用循环遍历数组时，确保遍历的索引在数组范围内。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;iterateArray&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr)&lt;/span&gt; {
    &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; i &amp;lt; arr.length; i++) {
        &lt;span class=&quot;hljs-comment&quot;&gt;// 对数组元素的操作&lt;/span&gt;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码解析：&lt;/strong&gt;  根据如上代码，我们可以知道：这段代码是一个静态方法，它接收一个整数数组作为参数。在方法中，使用一个for循环来迭代数组。循环的条件是i小于数组的长度。在每次循环迭代中，会执行一个对数组元素的操作。具体操作的代码没有给出，需要根据具体需求来补充。注意，在代码中，i从0开始，并且每次循环迭代后i会自增1，直到i等于数组的长度。这样可以确保所有的数组元素都被遍历到。使用该方法时，需要传入一个整数数组作为参数。可以将具体的需要操作的代码放在注释那一行。例如，如果需要打印数组中的每个元素，可以将注释改为：
System.out.println(arr[i]);这段代码是一个静态方法，它接收一个整数数组作为参数。&lt;/p&gt;
&lt;h3 data-id=&quot;heading-6&quot;&gt;方法三：使用增强型 for 循环&lt;/h3&gt;
&lt;p&gt;  使用增强型 for 循环可以简化数组的遍历，并且避免了手动控制索引的操作，减少了越界的风险。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;iterateArray&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr)&lt;/span&gt; {
    &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; element : arr) {
        &lt;span class=&quot;hljs-comment&quot;&gt;// 对数组元素的操作&lt;/span&gt;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;代码解析：&lt;/strong&gt;  根据如上代码，我们可以知道：这段代码定义了一个静态方法&lt;code&gt;iterateArray&lt;/code&gt;，它接收一个整型数组&lt;code&gt;arr&lt;/code&gt;作为参数。在方法中，使用了&lt;code&gt;for-each&lt;/code&gt;循环来迭代数组&lt;code&gt;arr&lt;/code&gt;中的每一个元素。循环变量&lt;code&gt;element&lt;/code&gt;依次取数组中的元素值，并执行相应的操作。在注释部分，可以添加对数组元素的操作代码，根据具体需求来处理每个元素。注意：&lt;code&gt;arr&lt;/code&gt;参数只能接收整型数组，不能是其他类型的数组。若想处理其他类型的数组，需要修改方法的参数类型。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-7&quot;&gt;应用场景案例&lt;/h2&gt;
&lt;p&gt;  通过一个应用场景案例，我们将演示如何避免数组越界错误，并确保程序的正确运行。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-8&quot;&gt;优缺点分析&lt;/h2&gt;
&lt;h3 data-id=&quot;heading-9&quot;&gt;优点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;避免程序因数组越界而崩溃或产生错误结果&lt;/li&gt;
&lt;li&gt;提高程序的稳定性和可靠性&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-id=&quot;heading-10&quot;&gt;缺点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;需要额外的代码和逻辑来处理数组的边界情况&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-id=&quot;heading-11&quot;&gt;类代码方法介绍&lt;/h2&gt;
&lt;p&gt;在Java中，一些类和方法提供了处理数组越界问题的实用工具。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-12&quot;&gt;具体的Java代码测试用例&lt;/h2&gt;
&lt;p&gt;  为了更好地理解和验证解决方案，我们提供了一些具体的Java代码测试用例，用于演示如何避免数组越界错误。&lt;/p&gt;
&lt;p&gt;以下是一些具体的Java代码测试用例，以演示如何避免数组越界错误：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;hljs language-java&quot; lang=&quot;java&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;package&lt;/span&gt; com.example.javase.wf;

&lt;span class=&quot;hljs-comment&quot;&gt;/**
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Author&lt;/span&gt; wf
 * &lt;span class=&quot;hljs-doctag&quot;&gt;@Date&lt;/span&gt; 2024-02-09 13:14
 */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title class_&quot;&gt;ArrayEx&lt;/span&gt; {
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(String[] args)&lt;/span&gt; {
        &lt;span class=&quot;hljs-comment&quot;&gt;// 示例1：索引范围检查&lt;/span&gt;
        &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] numbers = {&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;3&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;4&lt;/span&gt;, &lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;};
        elementAccess(numbers, &lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;); &lt;span class=&quot;hljs-comment&quot;&gt;// 正常情况，输出：数组元素为：3&lt;/span&gt;
        elementAccess(numbers, &lt;span class=&quot;hljs-number&quot;&gt;6&lt;/span&gt;); &lt;span class=&quot;hljs-comment&quot;&gt;// 越界情况，输出：索引超出范围！&lt;/span&gt;

        &lt;span class=&quot;hljs-comment&quot;&gt;// 示例2：循环遍历时的边界控制&lt;/span&gt;
        iterateArray(numbers);

        &lt;span class=&quot;hljs-comment&quot;&gt;// 示例3：使用增强型 for 循环&lt;/span&gt;
        enhancedForLoop(numbers);
    }

    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;elementAccess&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr, &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; index)&lt;/span&gt; {
        &lt;span class=&quot;hljs-comment&quot;&gt;// 检查索引范围&lt;/span&gt;
        &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (index &amp;gt;= &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt; &amp;amp;&amp;amp; index &amp;lt; arr.length) {
            &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;element&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; arr[index];
            System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;数组元素为：&quot;&lt;/span&gt; + element);
        } &lt;span class=&quot;hljs-keyword&quot;&gt;else&lt;/span&gt; {
            System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;索引超出范围！&quot;&lt;/span&gt;);
        }
    }

    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;iterateArray&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr)&lt;/span&gt; {
        &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; i &amp;lt; arr.length; i++) {
            System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;数组元素：&quot;&lt;/span&gt; + arr[i]);
        }
    }

    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title function_&quot;&gt;enhancedForLoop&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;[] arr)&lt;/span&gt; {
        &lt;span class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; element : arr) {
            System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;数组元素：&quot;&lt;/span&gt; + element);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上代码提供了三个示例：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;示例1：演示了索引范围检查方法，通过检查索引范围避免了数组越界错误；&lt;/li&gt;
&lt;li&gt;示例2：展示了使用循环遍历时的边界控制，确保索引在合法范围内，避免越界；&lt;/li&gt;
&lt;li&gt;示例3：使用增强型 for 循环遍历数组，这种方式会隐式地处理索引，不需要手动控制。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  请运行这些示例代码，并观察输出结果，验证避免数组越界错误的方法。&lt;/p&gt;
&lt;p&gt;  希望这些示例能帮助您更好地理解和应用数组的操作方法！如有其他问题，请随时提问。&lt;/p&gt;
&lt;p&gt;  根据如上部分测试用例，本地执行结果如下，仅供参考：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/be93f8246c3b49c2b8215720ea45fb6a~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1150&amp;amp;h=869&amp;amp;s=66944&amp;amp;e=png&amp;amp;b=2b2b2b&quot; alt=&quot;在这里插入图片描述&quot; loading=&quot;lazy&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;测试代码解析：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;  针对如上测试代码，这里我再具体给大家讲解下，希望能够更透彻的帮助大家理解。&lt;/p&gt;
&lt;p&gt;  如上段代码是一个数组操作的示例类。主要展示了数组的索引范围检查、循环遍历和使用增强型for循环的示例。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;elementAccess方法：该方法用于检查指定索引位置处的数组元素。如果索引在数组范围内，则输出对应的元素值；否则输出&quot;索引超出范围！&quot;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;iterateArray方法：该方法使用普通的for循环遍历数组，并输出每个数组元素的值。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;enhancedForLoop方法：该方法使用增强型for循环遍历数组，并输出每个数组元素的值。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;  在main方法中，首先定义一个包含5个元素的整型数组numbers，然后分别调用elementAccess方法、iterateArray方法和enhancedForLoop方法进行示例演示。其中elementAccess方法演示了索引范围检查，而iterateArray方法和enhancedForLoop方法演示了数组的循环遍历的两种方式。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-13&quot;&gt;全文小结&lt;/h2&gt;
&lt;p&gt;  通过本文的学习，我们了解了数组越界问题的原因和影响，并提供了多种解决方案。我们探讨了数组索引范围检查、循环遍历边界控制和使用增强型 for 循环的方法。同时，我们分析了解决方案的优缺点，以及常用的类和方法。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-14&quot;&gt;总结&lt;/h2&gt;
&lt;p&gt;  数组越界问题是开发中常见的错误，但我们可以通过合适的技巧和方法来避免它带来的风险。通过加强对数组的边界控制和检查，我们可以提高程序的稳定性和可靠性。&lt;/p&gt;
&lt;p&gt;  希望本文能够帮助您在使用数组时避免越界问题，并增进对数组的理解。请继续学习和实践，进一步探索数组在数据处理中的奇妙世界。&lt;/p&gt;
&lt;p&gt;  请注意，以上是一个文章的框架示例，您需要根据实际情况和需求，编写文章的详细内容。同时，请确保使用Markdown语法编写全文，并在引用和参考来源时遵循适当的学术和版权规范，以确保文章的原创性和低查重率。&lt;/p&gt;
&lt;p&gt;  希望这些示例能帮助您完成目标。如果有任何其他问题，请随时提问。&lt;/p&gt;
&lt;h1 data-id=&quot;heading-15&quot;&gt;最后&lt;/h1&gt;
&lt;p&gt;  大家如果觉得看了本文有帮助的话，麻烦给不熬夜崽崽点个&lt;strong&gt;三连&lt;/strong&gt;（点赞、收藏、关注）支持一下哈，大家的支持就是我写作的无限动力。&lt;/p&gt;&lt;/div&gt;文章源地址：&lt;a href=https://juejin.cn/post/7339881936595337255 rel=&quot;nofollow&quot; &gt;https://juejin.cn/post/7339881936595337255&lt;/a&gt;</description><pubDate>Tue, 27 Feb 2024 13:36:41 +0800</pubDate></item></channel></rss>