<?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://www.hubala.cn/</link><description>技术文章分享与学习平台</description><item><title>IDEA插件-热部署JRebel</title><link>http://www.hubala.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://www.hubala.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://www.hubala.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://www.hubala.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://www.hubala.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://www.hubala.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://www.hubala.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://www.hubala.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://www.hubala.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://www.hubala.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://www.hubala.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://www.hubala.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://www.hubala.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://www.hubala.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://www.hubala.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><item><title>java --- 封装、继承、多态</title><link>http://www.hubala.cn/post/139.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;h1 data-id=&quot;heading-0&quot;&gt;封装&lt;/h1&gt;&lt;h2 data-id=&quot;heading-1&quot;&gt;定义&lt;/h2&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Java中的封装(Encapsulation)是一种面向对象编程(Object-Oriented Programming，OOP)的概念，指的是将类的&lt;code&gt;成员变量(属性)&lt;/code&gt;和&lt;code&gt;成员方法(方法)&lt;/code&gt;&lt;strong&gt;隐藏&lt;/strong&gt;起来，通过使用&lt;code&gt;访问修饰符(如private、public、default、protected等)&lt;/code&gt;来限制外部对类的直接访问，从而保护类的内部状态和行为。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;封装是将数据和操作数据的方法进行有机结合，隐藏对象的属性和实现细节，进对外公开接口来和对象进行交互&lt;/strong&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;eg:电脑提供给用户的就只是一些很容易上手的功能：开关机、通过键盘输入，显示器，USB插孔等，让用户来和计算机进行交互，以此来完成日常事务。&lt;/p&gt;&lt;p&gt;但一个计算机，真正工作的是黑匣子里面的CPU、显卡、内存等一些硬件元件。&lt;/p&gt;&lt;p&gt;对于计算机使用者而言，不用去关心内部的核心不见，比如主板上的线路是如何布局的？CPU是如何设计的？&lt;/p&gt;&lt;p&gt;用户只需要知道，怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。&lt;/p&gt;&lt;p&gt;因此计算机厂商在出厂的时候，在外部套上壳子，将内部的实现细节隐藏起来，仅仅对外提供开关机、鼠标以及键盘插孔等，让用户可以与计算机进行交互即可，这样能让用户操作更舒适，也更进一步得保护电脑主机。对于我们写的程序来说也是这样&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 data-id=&quot;heading-2&quot;&gt;访问修饰符&lt;/h2&gt;&lt;p&gt;&lt;code&gt;1. private ( 当前类访问权限 )&lt;/code&gt;&lt;/p&gt;&lt;p&gt;使用&lt;strong&gt;private&lt;/strong&gt;修饰的&lt;strong&gt;成员&lt;/strong&gt;只能在&lt;strong&gt;当前类的内部&lt;/strong&gt;被访问。常用于修饰&lt;strong&gt;成员变量&lt;/strong&gt;&amp;nbsp;( 封装 )。&lt;/p&gt;&lt;p&gt;可以使用setXXX()和getXXX()来进行赋值和获取值，并可以在setXXX()中进行逻辑处理判断后在进行赋值&lt;/p&gt;&lt;pre&gt;public&amp;nbsp;class&amp;nbsp;Demo{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;main(String[]&amp;nbsp;args){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Person&amp;nbsp;p&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Person();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;p.name&amp;nbsp;=&amp;nbsp;“tom”;&amp;nbsp;//&amp;nbsp;报错，不可以直接使用私有属性&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;p.age&amp;nbsp;=&amp;nbsp;18;&amp;nbsp;//&amp;nbsp;报错，不可以直接使用私有属性&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}class&amp;nbsp;Person{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;String&amp;nbsp;name;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;int&amp;nbsp;age;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;setName(String&amp;nbsp;name){
&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;this.name&amp;nbsp;=&amp;nbsp;name;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}public&amp;nbsp;getName(){&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;this.name;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}public&amp;nbsp;setAge(int&amp;nbsp;age){&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(age&amp;nbsp;&amp;lt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.age&amp;nbsp;=&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;}else{this.age&amp;nbsp;=&amp;nbsp;a;
&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;&amp;nbsp;&amp;nbsp;}public&amp;nbsp;int&amp;nbsp;getAge(){&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;this.age;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;p&gt;&lt;code&gt;2. default ( 包访问权限 )&lt;/code&gt;&lt;/p&gt;&lt;p&gt;默认权限修饰符。使用&amp;nbsp;&lt;strong&gt;default&lt;/strong&gt;&amp;nbsp;修饰的&amp;nbsp;&lt;strong&gt;成员或外部类&lt;/strong&gt;&amp;nbsp;可以被&amp;nbsp;&lt;strong&gt;相同包下的其他类&lt;/strong&gt;&amp;nbsp;访问。&lt;/p&gt;&lt;p&gt;&lt;code&gt;3. protect ( 子类访问权限 )&lt;/code&gt;&lt;/p&gt;&lt;p&gt;使用&amp;nbsp;&lt;strong&gt;protect&lt;/strong&gt;&amp;nbsp;修饰的&amp;nbsp;&lt;strong&gt;成员&lt;/strong&gt;&amp;nbsp;既可以被&amp;nbsp;&lt;strong&gt;同一个包中的其他类&lt;/strong&gt;&amp;nbsp;访问，也可以被&amp;nbsp;&lt;strong&gt;不同包中的子类&lt;/strong&gt;&amp;nbsp;访问。常用于修饰&amp;nbsp;&lt;strong&gt;希望被子类重写的方法&lt;/strong&gt;&amp;nbsp;( override )。&lt;/p&gt;&lt;p&gt;&lt;code&gt;4. public ( 公共访问权限 )&lt;/code&gt;&lt;/p&gt;&lt;p&gt;使用&amp;nbsp;&lt;strong&gt;public&lt;/strong&gt;&amp;nbsp;修饰的&amp;nbsp;&lt;strong&gt;成员或者外部类&lt;/strong&gt;&amp;nbsp;可以被&amp;nbsp;&lt;strong&gt;所有类&lt;/strong&gt;&amp;nbsp;访问。&lt;/p&gt;&lt;p&gt;&lt;code&gt;5. 访问控制级别表&lt;/code&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;br/&gt;&lt;/th&gt;&lt;th&gt;private&lt;/th&gt;&lt;th&gt;default&lt;/th&gt;&lt;th&gt;protect&lt;/th&gt;&lt;th&gt;public&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;同一个类中&lt;/td&gt;&lt;td&gt;Y&lt;/td&gt;&lt;td&gt;Y&lt;/td&gt;&lt;td&gt;Y&lt;/td&gt;&lt;td&gt;Y&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;同一个包中&lt;/td&gt;&lt;td&gt;&lt;br/&gt;&lt;/td&gt;&lt;td&gt;Y&lt;/td&gt;&lt;td&gt;Y&lt;/td&gt;&lt;td&gt;Y&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;子类中&lt;/td&gt;&lt;td&gt;&lt;br/&gt;&lt;/td&gt;&lt;td&gt;&lt;br/&gt;&lt;/td&gt;&lt;td&gt;Y&lt;/td&gt;&lt;td&gt;Y&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;全局范围内&lt;/td&gt;&lt;td&gt;&lt;br/&gt;&lt;/td&gt;&lt;td&gt;&lt;br/&gt;&lt;/td&gt;&lt;td&gt;&lt;br/&gt;&lt;/td&gt;&lt;td&gt;Y&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h1 data-id=&quot;heading-3&quot;&gt;继承&lt;/h1&gt;&lt;h2 data-id=&quot;heading-4&quot;&gt;定义&lt;/h2&gt;&lt;p&gt;继承就是子类继承父类的特征和行为，使得子类对象（实例）具有父类的实例域和方法，或子类从父类继承方法，使得子类具有父类相同的行为。&lt;/p&gt;&lt;h2 data-id=&quot;heading-5&quot;&gt;格式&lt;/h2&gt;&lt;pre&gt;class父类&amp;nbsp;{&amp;nbsp;}&amp;nbsp;
class子类&amp;nbsp;extends父类&amp;nbsp;{&amp;nbsp;}&lt;/pre&gt;&lt;h2 data-id=&quot;heading-6&quot;&gt;分类&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/56c4848942d04f51af1cc7f802ebb572~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1301&amp;h=1080&amp;s=518634&amp;e=png&amp;b=eaeaea&quot; alt=&quot;image.png&quot; loading=&quot;lazy&quot;/&gt;&lt;/p&gt;&lt;p&gt;特点：&lt;/p&gt;&lt;p&gt;继承关系是传递的。若类C继承类B，类B继承类A（多层继承），则类C既有从类B那里继承下来的属性与方法，也有从类A那里继承下来的属性与方法，还可以有自己新定义的属性和方法。&lt;/p&gt;&lt;p&gt;继承来的属性和方法尽管是隐式的，但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。&lt;/p&gt;&lt;h2 data-id=&quot;heading-7&quot;&gt;构造器 super()&lt;/h2&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;子类是不继承父类的构造器（构造方法或者构造函数）的，它只是调用（隐式或显式）。如果父类的构造器带有参数，则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;如果父类构造器没有参数，则在子类的构造器中不需要使用super关键字调用父类构造器，系统会自动调用父类的无参构造器。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;父类中的共有成员变量自变量可以使用，如果同名的变量子类没有，则可以直接使用父类的成员变量，否则需要使用super关键字&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;pre&gt;class&amp;nbsp;Fu{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;i&amp;nbsp;=&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;c&amp;nbsp;=&amp;nbsp;1;
}class&amp;nbsp;Zi&amp;nbsp;extends&amp;nbsp;Fu{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;j&amp;nbsp;=&amp;nbsp;2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;c&amp;nbsp;=&amp;nbsp;2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;print(){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;a&amp;nbsp;=&amp;nbsp;3;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;c&amp;nbsp;=&amp;nbsp;3;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(a);//3&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(j);//2&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(i);//1&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(c);//3&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(this.c);//2&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(super.c);//1}
}class&amp;nbsp;Demo{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;main(Sting[]&amp;nbsp;args){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Zi&amp;nbsp;zi&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Zi();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;zi.print();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;ol start=&quot;4&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;子类中的所有的构造方法的第一行默认都有一个super()&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;pre&gt;class&amp;nbsp;Fu{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String&amp;nbsp;name;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;Fu(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name&amp;nbsp;=&amp;nbsp;“tom”;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}class&amp;nbsp;Zi&amp;nbsp;extends&amp;nbsp;Fu{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;Zi(){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//super();&amp;nbsp;&amp;nbsp;//调用父类的空参构造}public&amp;nbsp;Zi(String&amp;nbsp;name){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//super();&amp;nbsp;//调用父类的空参构造}
}class&amp;nbsp;Demo{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;main(String[]&amp;nbsp;args){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Zi&amp;nbsp;zi&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Zi();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(zi.name);//tom&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;创建子类对象的时候，会调用子类构造函数，&amp;nbsp;&amp;nbsp;&amp;nbsp;//而子类构造函数方法中有隐藏的super()方法，&amp;nbsp;&amp;nbsp;&amp;nbsp;//作用是调用父类的构造方法，目的是给父类的成员初始化&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;h1 data-id=&quot;heading-8&quot;&gt;多态&lt;/h1&gt;&lt;h2 data-id=&quot;heading-9&quot;&gt;定义&lt;/h2&gt;&lt;p&gt;在Java中，多态是面向对象编程中的一个重要概念，它允许不同类型的对象对同一方法进行不同的实现。具体来说，多态性指的是通过父类的引用变量来引用子类的对象，从而实现对不同对象的统一操作。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;例如：狗和猫都是动物，动物共同的行为都有吃这个动作，而狗可以表现为啃骨头，猫则可以表现为吃老鼠。这就是多态的表现，即同一件事情，发生在不同对象的身上，就会产生不同的结果。&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 data-id=&quot;heading-10&quot;&gt;多态实现的条件&lt;/h2&gt;&lt;p&gt;在Java中，要实现多态性，就必须满足以下条件：&lt;/p&gt;&lt;h4 data-id=&quot;heading-11&quot;&gt;继承关系&lt;/h4&gt;&lt;p&gt;存在继承关系的类之间才能够使用多态性。多态性通常通过一个父类用变量引用子类对象来实现。&lt;/p&gt;&lt;h4 data-id=&quot;heading-12&quot;&gt;方法重写&lt;/h4&gt;&lt;p&gt;子类必须重写（Override）父类的方法。通过在子类中重新定义和实现父类的方法，可以根据子类的特点行为改变这个方法的行为，如猫和狗吃东西的独特行为。&lt;/p&gt;&lt;h4 data-id=&quot;heading-13&quot;&gt;父类引用指向子类对象&lt;/h4&gt;&lt;p&gt;使用父类的引用变量来引用子类对象。这样可以实现对不同类型的对象的统一操作，而具体调用哪个子类的方法会在运行时多态决定&lt;/p&gt;&lt;pre&gt;例如，下面的案例是根据猫和狗叫的动作的不同，而实现的多态class&amp;nbsp;Animal&amp;nbsp;{public&amp;nbsp;void&amp;nbsp;sound()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&amp;quot;动物发出声音&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}class&amp;nbsp;Dog&amp;nbsp;extends&amp;nbsp;Animal&amp;nbsp;{@Overridepublic&amp;nbsp;void&amp;nbsp;sound()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&amp;quot;狗发出汪汪声&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}class&amp;nbsp;Cat&amp;nbsp;extends&amp;nbsp;Animal&amp;nbsp;{@Overridepublic&amp;nbsp;void&amp;nbsp;sound()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&amp;quot;猫发出喵喵声&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}public&amp;nbsp;class&amp;nbsp;Main&amp;nbsp;{public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{Animal&amp;nbsp;animal1&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Dog();&amp;nbsp;//&amp;nbsp;父类引用指向子类对象Animal&amp;nbsp;animal2&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Cat();&amp;nbsp;//&amp;nbsp;父类引用指向子类对象animal1.sound();&amp;nbsp;//&amp;nbsp;输出：狗发出汪汪声animal2.sound();&amp;nbsp;//&amp;nbsp;输出：猫发出喵喵声}
}//在这个示例中，Animal&amp;nbsp;类是父类，Dog&amp;nbsp;和&amp;nbsp;Cat&amp;nbsp;类是它的子类//通过将父类的引用变量分别指向子类对象，实现了多态性//在运行时，根据引用变量的实际类型来调用相应的子类方法，从而输出不同的声音&lt;/pre&gt;&lt;h2 data-id=&quot;heading-14&quot;&gt;多态间子父类之间成员变量的关系&lt;/h2&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 父类中有一个成员变量，子类中有一个成员变量，两个变量的名字不同 ——— 父类引用不能使用子类中特有的成员变量&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 父类中有一个成员变量，子类中有一个成员变量，两个变量的名字相同 ——— 父类引用只能使用自身带的成员变量，不能使用子类中成员变量&lt;/p&gt;&lt;p&gt;&lt;strong&gt;口诀：多态调用成员变量的时候，编译看左边，运行看左边 —— 意思是编译是否报错看等号左边的类对象里是否有该成员变量，运行是否能成功看左边的类对象里是否有该成员变量&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;class&amp;nbsp;Fu{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;i&amp;nbsp;=&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;z&amp;nbsp;=&amp;nbsp;1;
}class&amp;nbsp;Zi&amp;nbsp;extends&amp;nbsp;Fu{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;j&amp;nbsp;=&amp;nbsp;2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;z&amp;nbsp;=&amp;nbsp;2;
}class&amp;nbsp;Demo{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;main(String[]&amp;nbsp;args){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Fu&amp;nbsp;fu&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Zi();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(fu.i);//1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//System.out.println(fu.j);//编译报错System.out.println(fu.z);//1}
}&lt;/pre&gt;&lt;p&gt;&lt;img src=&quot;https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d19100c316cc4da1a341a61414b927f9~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=881&amp;h=414&amp;s=102717&amp;e=png&amp;b=fefefe&quot; alt=&quot;image.png&quot; loading=&quot;lazy&quot;/&gt;&lt;/p&gt;&lt;h2 data-id=&quot;heading-15&quot;&gt;多态间子父类之间成员方法的关系&lt;/h2&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 父类中有一个成员方法，子类中有一个成员方法，两个方法的名字不同 —— 父类引用不能使用子类中特有的成员方法&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 父类中有一个成员方法，子类中有一个成员方法，两个方法的名字相同 —— 父类引用可以使用子类中重写父类的方法&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;口诀：多态调用成员方法，编译看左边，运行看右边 —— 意思是编译是否报错看等号左边的类对象里是否有该成员变量，运行是否能成功看右边的类对象里是否有该成员变量&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;class&amp;nbsp;Fu{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;printFu{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(“Fu”);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}public&amp;nbsp;void&amp;nbsp;print{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(“FU——”);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}class&amp;nbsp;Zi&amp;nbsp;extends&amp;nbsp;Fu{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;void&amp;nbsp;printZi{
&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;System.out.println(“Zi”);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}public&amp;nbsp;void&amp;nbsp;print{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(“Zi——”);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}class&amp;nbsp;Demo{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;void&amp;nbsp;main(String[]&amp;nbsp;args){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Fu&amp;nbsp;fu&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Zi();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fu.printFu();//Fu&amp;nbsp;&amp;nbsp;&amp;nbsp;//fu.printZi();//编译错误&amp;nbsp;&amp;nbsp;&amp;nbsp;fu.print();//Zi}
}&lt;/pre&gt;&lt;p&gt;&lt;img src=&quot;https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c6e427fbe57f4f87b7d48fd3f4236438~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1018&amp;h=471&amp;s=145400&amp;e=png&amp;b=fefefe&quot; alt=&quot;image.png&quot; loading=&quot;lazy&quot;/&gt;&lt;/p&gt;&lt;h1 data-id=&quot;heading-16&quot;&gt;重写&lt;/h1&gt;&lt;h2 data-id=&quot;heading-17&quot;&gt;什么是重写&lt;/h2&gt;&lt;p&gt;在面向对象编程中，重写（Override）指的是子类重新定义和实现了从父类继承而来的方法，以改变方法的行为。子类通过重写方法可以提供自己特定的实现，使得父类方法的行为在子类对象的身上有不同的表现。&lt;/p&gt;&lt;h2 data-id=&quot;heading-18&quot;&gt;概念&lt;/h2&gt;&lt;h3 data-id=&quot;heading-19&quot;&gt;继承关系&lt;/h3&gt;&lt;p&gt;重写方法是基于父类和子类之间的继承关系。子类继承了父类的方法，包括方法的名称、参数列表和返回类型。&lt;/p&gt;&lt;h3 data-id=&quot;heading-20&quot;&gt;方法签名&lt;/h3&gt;&lt;p&gt;重写的方法与父类的方法具有相同的方法签名，即方法的名称、参数列表和返回类型必须一致（当然，如果返回类型的对象本身的类型则可以不同，但是必须要有继承关系）。方法签名不包括方法体。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;补充:
方法签名的组成：方法名和参数列表（形参类别、个数、顺序）&lt;/p&gt;&lt;/blockquote&gt;&lt;h3 data-id=&quot;heading-21&quot;&gt;@Override注解&lt;/h3&gt;&lt;p&gt;为了明确表明这是一个重写的方法，可以使用 @Override 注解来标记子类中的方法。该注解会在编译时检查是否满足重写条件，如果不满足会报错。&lt;/p&gt;&lt;h3 data-id=&quot;heading-22&quot;&gt;动态绑定&lt;/h3&gt;&lt;p&gt;通过父类引用变量调用被子类重写的方法时，会根据实际引用的对象类型，在运行时动态绑定到相应的子类方法。&lt;/p&gt;&lt;h2 data-id=&quot;heading-23&quot;&gt;方法重写的规则：&lt;/h2&gt;&lt;ol 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;strong&gt;public &amp;gt; protected &amp;gt;&amp;nbsp; 默认 &amp;gt; private&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;例如：如果父类方法被public修饰，则子类中重写该方法就不能声明为 protected。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;重写的方法不能抛出比父类中被重写的方法更多或更宽泛的异常。子类中重写的方法可以抛出相同的异常或更具体的异常，或者不抛出异常&lt;/p&gt;&lt;p&gt;例如，如果父类的方法声明抛出 IOException，则子类中重写的方法可以抛出 IOException 或 FileNotFoundException，或者不抛出异常，但不能抛出比 IOException 更通用的异常，如 Exception。
重写的方法必须具有相同的方法体，或者可以进行方法体的扩展&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;子类中重写的方法可以调用父类中被重写的方法，使用 super 关键字&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 data-id=&quot;heading-24&quot;&gt;重写和重载的比较&lt;/h2&gt;&lt;h3 data-id=&quot;heading-25&quot;&gt;重载的条件&lt;/h3&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;方法名称相同&lt;/strong&gt;：重载的方法必须具有相同的名称。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;参数列表不同&lt;/strong&gt;：重载的方法的参数列表必须不同。参数列表可以通过参数的类型、个数或顺序的不同来区分重载方法。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;返回类型可以相同也可以不同&lt;/strong&gt;：重载的方法可以具有相同的返回类型，也可以具有不同的返回类型。返回类型不是重载方法的区分标准。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;重载方法必须定义在同一个类中&lt;/strong&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;方法的访问修饰符和异常：重载方法可以具有相同的访问修饰符（如 public、private、protected）和相同的抛出的异常。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 data-id=&quot;heading-26&quot;&gt;重写和重载的区别：&lt;/h3&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;概念上的不同&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;重载指的是在同一个类中，根据方法的参数列表的不同，定义多个具有&lt;code&gt;相同名称&lt;/code&gt;但&lt;code&gt;参数类型或个数不同&lt;/code&gt;，并且&lt;code&gt;相同或者不相同的返回类型&lt;/code&gt;的方法。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;重写指的是子类重新定义和实现了从父类中继承的方法。重写的方法具有与父类方法&lt;code&gt;相同的名称&lt;/code&gt;、&lt;code&gt;相同的参数列表&lt;/code&gt;和可以&lt;code&gt;相同或具有继承关系的返回类型&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol start=&quot;2&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;使用上的不同&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul 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;li&gt;&lt;p&gt;运行时调用：重载方法是根据方法的参数列表的不同进行静态绑定，在编译时确定。重写方法是根据对象的实际类型进行动态绑定，在运行时确定。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol start=&quot;3&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;目的不同&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul 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;/ul&gt;&lt;blockquote&gt;&lt;p&gt;总结来说，&lt;/p&gt;&lt;ul 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;/blockquote&gt;&lt;/div&gt;&lt;p&gt;文章源地址：&lt;a href=&quot;https:&quot;&gt;https://juejin.cn/post/7339809994152788006&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 27 Feb 2024 13:36:39 +0800</pubDate></item><item><title>解密ArrayList：深入学习Java中最常用的动态数组</title><link>http://www.hubala.cn/post/138.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;  ArrayList是Java中常用的数据结构之一，它提供了动态数组的功能，在开发中经常被用于存储和操作数据。在本文中，我们将对ArrayList进行详细介绍，包括其背后的原理、使用方法和一些最佳实践。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-1&quot;&gt;摘要&lt;/h2&gt;
&lt;p&gt;  本文将全面介绍Java中的ArrayList，包括其基本概念、特点和用法。我们将通过源代码解析和应用场景案例，深入探讨ArrayList在实际开发中的应用和优缺点。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-2&quot;&gt;简介&lt;/h2&gt;
&lt;p&gt;  ArrayList是Java集合框架中的一个类，是基于数组实现的动态数组。它提供了灵活的方法来处理元素的插入、删除和查找等操作，同时还具备动态扩容和自动缩减的能力。在本节中，我们将介绍ArrayList的基本概念和简介。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-3&quot;&gt;源代码解析&lt;/h2&gt;
&lt;p&gt;  我们将深入解析ArrayList的源代码，探讨其内部实现和关键方法。通过源代码解析，可以更好地理解ArrayList的工作原理和使用方法。&lt;/p&gt;
&lt;p&gt;如下为ArrayList的源代码部分截图，同学们可以深入去解读下。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dbd6522b5ed14c02a6c3256c4251c537~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1190&amp;amp;h=899&amp;amp;s=97098&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;h2 data-id=&quot;heading-4&quot;&gt;应用场景案例&lt;/h2&gt;
&lt;p&gt;  通过具体的应用场景案例，我们将演示ArrayList在实际开发中的应用。这些案例将展示ArrayList的灵活性和方便性，帮助读者更好地理解其使用场景。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-5&quot;&gt;优缺点分析&lt;/h2&gt;
&lt;p&gt;  我们将对ArrayList的优点和缺点进行分析和比较。了解这些优点和局限性，能够帮助我们更好地评估在不同场景下使用ArrayList的适用性。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-6&quot;&gt;类代码方法介绍&lt;/h2&gt;
&lt;p&gt;  在本节中，我们将介绍ArrayList类中常用的方法。包括元素的插入、删除、获取以及扩容机制等方法。详细了解这些方法，有助于更好地使用ArrayList。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-7&quot;&gt;测试用例&lt;/h2&gt;
&lt;p&gt;  为了更好地理解和验证ArrayList的使用方法，我们提供了一些具体的Java代码测试用例。这些测试用例将演示ArrayList的各种操作，确保读者对其使用方法有清晰的了解。&lt;/p&gt;
&lt;p&gt;以下是一些具体的Java代码测试用例，演示了ArrayList的使用方法：&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.ArrayList;

&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;ArrayListExamples&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：创建并添加元素到ArrayList&lt;/span&gt;
        ArrayList&amp;lt;String&amp;gt; fruits = &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;();
        fruits.add(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Apple&quot;&lt;/span&gt;);
        fruits.add(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Banana&quot;&lt;/span&gt;);
        fruits.add(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Orange&quot;&lt;/span&gt;);
        System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;水果列表：&quot;&lt;/span&gt; + fruits);

        &lt;span class=&quot;hljs-comment&quot;&gt;// 示例2：访问和修改ArrayList中的元素&lt;/span&gt;
        &lt;span class=&quot;hljs-type&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;hljs-variable&quot;&gt;fruit&lt;/span&gt; &lt;span class=&quot;hljs-operator&quot;&gt;=&lt;/span&gt; fruits.get(&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;);
        System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;第二个水果：&quot;&lt;/span&gt; + fruit);

        fruits.set(&lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;Mango&quot;&lt;/span&gt;);
        System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;修改后的水果列表：&quot;&lt;/span&gt; + fruits);

        &lt;span class=&quot;hljs-comment&quot;&gt;// 示例3：删除ArrayList中的元素&lt;/span&gt;
        fruits.remove(&lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;);
        System.out.println(&lt;span class=&quot;hljs-string&quot;&gt;&quot;删除后的水果列表：&quot;&lt;/span&gt; + fruits);

        &lt;span class=&quot;hljs-comment&quot;&gt;// 示例4：遍历ArrayList&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;for&lt;/span&gt; (String item : fruits) {
            System.out.println(item);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上代码提供了四个示例：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;示例1：展示了创建ArrayList对象并添加元素的过程。&lt;/li&gt;
&lt;li&gt;示例2：演示了如何访问和修改ArrayList中的元素。&lt;/li&gt;
&lt;li&gt;示例3：展示了删除ArrayList中元素的方法。&lt;/li&gt;
&lt;li&gt;示例4：使用增强型for循环遍历ArrayList并打印每个元素。&lt;/li&gt;
&lt;/ul&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/96d643934a57416ab3078af727c7962d~tplv-k3u1fbpfcp-jj-mark:3024:0:0:0:q75.awebp#?w=1149&amp;amp;h=855&amp;amp;s=79265&amp;amp;e=png&amp;amp;b=2c2c2c&quot; alt=&quot;在这里插入图片描述&quot; loading=&quot;lazy&quot;&gt;&lt;/p&gt;
&lt;p&gt;同学们也可以去尝试下，修改我提供的示例，多熟悉下ArrayList的常使用方法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;测试代码解析：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;  针对如上测试代码，这里我再具体给大家讲解下，希望能够更透彻的帮助大家理解。首先，导入java.util.ArrayList类。然后，在主函数中：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;创建一个ArrayList对象&lt;code&gt;fruits&lt;/code&gt;，并添加一些元素，包括&quot;Apple&quot;、&quot;Banana&quot;和&quot;Orange&quot;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用&lt;code&gt;get()&lt;/code&gt;方法访问第二个元素，并将结果赋值给&lt;code&gt;fruit&lt;/code&gt;变量。然后打印出&lt;code&gt;fruit&lt;/code&gt;的值。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用&lt;code&gt;set()&lt;/code&gt;方法将列表中的第一个元素修改为&quot;Mango&quot;，然后打印出修改后的水果列表。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用&lt;code&gt;remove()&lt;/code&gt;方法删除列表中的第三个元素，然后打印出删除后的水果列表。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用for循环遍历水果列表，将每个元素打印出来。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-id=&quot;heading-8&quot;&gt;全文小结&lt;/h2&gt;
&lt;p&gt;  通过本文的学习，我们了解了ArrayList的基本概念、使用方法和内部实现机制。通过源代码解析和具体案例的演示，我们掌握了ArrayList在实际开发中的应用和优缺点。&lt;/p&gt;
&lt;h2 data-id=&quot;heading-9&quot;&gt;总结&lt;/h2&gt;
&lt;p&gt;  ArrayList作为Java开发中常用的数据结构之一，在动态数组的操作和管理方面提供了很多便利。通过深入学习ArrayList的使用方法和内部机制，我们可以更好地利用其功能来优化代码，并解决实际开发中的问题。&lt;/p&gt;
&lt;p&gt;  希望本文能够帮助您深入理解ArrayList，并应用于您的Java开发项目中。如有其他问题，请随时提问。祝您在使用ArrayList时取得更好的效果！&lt;/p&gt;
&lt;h1 data-id=&quot;heading-10&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/7339881936595386407 rel=&quot;nofollow&quot; &gt;https://juejin.cn/post/7339881936595386407&lt;/a&gt;</description><pubDate>Tue, 27 Feb 2024 13:36:37 +0800</pubDate></item></channel></rss>